WinCE获取设备ID

在Windows CE系统中,通过KernelIoControl函数可以方便地获取设备ID。然而,实际能否获取以及获取到的ID类型取决于驱动层的实现。本文不涉及设备ID的设置或编写,而是专注于展示如何调用函数来读取设备ID。示例代码演示了如何从一个平台的设备ID字符串"MyDeviceId"中获取ID。
               

//========================================================================
//TITLE:
//    WinCE获取设备ID
//AUTHOR:
//    norains
//DATE:
//    Sunday  4-November-2007
//Environment:
//        EVC4.0 + Windows CE 5.0 Standard SDK
//========================================================================

    在Wince下获取设备ID(Device ID)并不困难,只要简单地调用KernelIoControl即可.不过至于能否获得设备ID,并且获得的ID属于什么类型,则关系到驱动层的实现.而设备ID的实现,在不同的平台有不同,比如在夏普的LH71404的开发板中,设备ID位于platform.c中.不过本文目的不关注如何设置或编写设备ID,而仅仅是通过函数调用获得该设备ID而已.
   
    首先我们来看看设备ID在winCE下的定义:

    typedef  struct  _DEVICE_ID {
    DWORD   dwSize;
    DWORD   dwPresetIDOffset;
    DWORD   dwPresetIDBytes;
    DWORD   dwPlatformIDOffset;
    DWORD   dwPlatformIDBytes;
} DEVICE_ID,  * PDEVICE_ID;

     结构清晰明了,而我们所要关注的仅仅是这两个字段:dwPlatformIDOffset和dwPlatformIDBytes.
   
    现在假设我们有一个平台,该平台的设备ID为一个字符串:"MyDeviceId",那么我们可以通过下面一个简单的例子获得该设备ID:

     char  szBuf[MAX_PATH]  =  { 0 };
    DEVICE_ID devID  =  { 0 };
    GetDeviceID((BYTE  * )szBuf,MAX_PATH, & devID);
     char  szDeviceID[MAX_PATH]  =  { 0 };
    strcpy(szDeviceID,szBuf  +  devID.dwPlatformIDOffset);

    此时szDeviceID中存储的字符串就是"MyDeviceId".
   
    代码中的GetDeviceID是自己写的一个获取ID函数,该代码如下:
    DWORD GetDeviceID(BYTE  * pOutBuf,DWORD dwBufSize,DEVICE_ID  * pDeviceID)
        {
            DWORD dwRead  =   0 ;
             if (KernelIoControl(IOCTL_HAL_GET_DEVICEID, NULL,  0 , pOutBuf, dwBufSize,  & dwRead)  ==  FALSE)
            {
                 return   0 ;
            }
        
            pDeviceID  =  (PDEVICE_ID)pOutBuf;
        
             return  dwRead;
        }

  pOutBuf是传入的存储缓冲区,dwBufSize是缓冲区大小,pDeviceID是接受设备ID的结构信息,函数返回值是读取的字节数,当为0的时候,很可能是函数读设备ID失败.调用方法很简单,可参考上文的例子.
  
  代码中出现的IOCTL_HAL_GET_DEVICEID是WinCE下定义的宏,专注于获取设备ID,该宏的定义如下:
   #define  IOCTL_HAL_GET_DEVICEID      CTL_CODE(FILE_DEVICE_HAL, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)

  
  最后需要说的是,要使该段代码工作正常,尚且需要包含该头文件:Pkfuncs.h           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值