• 在Windows Embedded中获取设备ID


      本文向您介绍WinCE下获取设备ID的方法,包括设备ID在WinCE的定义、获取以及缓存区等技术实现。

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

      首先我们来看看设备ID在WinCE下的定义:

      1. typedef struct _DEVICE_ID {  
      2.     DWORD   dwSize;  
      3.     DWORD   dwPresetIDOffset;  
      4.     DWORD   dwPresetIDBytes;  
      5.     DWORD   dwPlatformIDOffset;  
      6.     DWORD   dwPlatformIDBytes;  
      7. } DEVICE_ID, *PDEVICE_ID; 

      结构清晰明了,而我们所要关注的仅仅是这两个字段:dwPlatformIDOffset和dwPlatformIDBytes.

      现在假设我们有一个平台,该平台的设备ID为一个字符串:"MyDeviceId",那么我们可以通过下面一个简单的例子获得该设备ID:

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

      此时szDeviceID中存储的字符串就是"MyDeviceId".

      代码中的GetDeviceID是自己写的一个获取ID函数,该代码如下:

      1. DWORD GetDeviceID(BYTE *pOutBuf,DWORD dwBufSize,DEVICE_ID *pDeviceID)  
      2.         {  
      3.             DWORD dwRead = 0;  
      4.             if(KernelIoControl(IOCTL_HAL_GET_DEVICEID, NULL, 0, pOutBuf, dwBufSize, &dwRead) == FALSE)  
      5.             {  
      6.                 return 0;  
      7.             }  
      8.           
      9.             pDeviceID = (PDEVICE_ID)pOutBuf;  
      10.           
      11.             return dwRead;  
      12.         } 

      pOutBuf是传入的存储缓冲区,dwBufSize是缓冲区大小,pDeviceID是接受设备ID的结构信息,函数返回值是读取的字节数,当为0的时候,很可能是函数读设备ID失败.调用方法很简单,可参考上文的例子.

      代码中出现的IOCTL_HAL_GET_DEVICEID是WinCE下定义的宏,专注于获取设备ID,该宏的定义如下:

      1. #define IOCTL_HAL_GET_DEVICEID      CTL_CODE(FILE_DEVICE_HAL, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) 

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

  • 相关阅读:
    Oracle学习笔记:oracle的表空间管理和sqlserver的文件组对比
    Oracle学习笔记:一个特殊的ORA12541错误原因
    Oracle学习笔记:通过种子数据库设置dbid为指定值
    Oracle学习笔记:使用rman duplicate {to|for} 创建数据库
    Oracle学习笔记:利用rman数据库备份,手工创建clone数据库
    使用Cufon技术实现Web自定义字体
    分享七个非常有用的Android开发工具和工具包
    60佳灵感来自大自然的网页设计作品欣赏
    20个独一无二的图片滑动效果创意欣赏
    40个幻灯片效果在网页设计中的应用案例
  • 原文地址:https://www.cnblogs.com/Jade2009/p/1642079.html
Copyright © 2020-2023  润新知