在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。

 

【编辑推荐】

  1. WinCE编译过程的四个阶段
  2. WinCE中触摸屏驱动开发详解
  3. 基于WinCE的液位遥测系统软件设计
  4. WinCE中串口驱动及接口函数介绍
  5. WinCE USB驱动开发经验谈
责任编辑:佚名 来源: 网络转载
相关推荐

2009-04-03 13:09:12

Windows Emb

2009-07-16 15:46:09

Windows Emb

2009-03-30 15:52:24

Windows Emb

2009-02-17 14:22:40

Windows Emb

2011-01-10 14:08:50

Windows Emb用户体验移动终端

2009-07-16 15:27:13

Windows Emb

2009-10-14 14:33:47

EmbeddedWindows 7OEM

2009-07-16 14:22:02

Windows Emb

2009-12-10 09:19:28

Windows 7嵌入式平台

2013-06-04 15:20:52

Windows EmbWindows 8.1

2011-04-02 17:21:40

Virtual PCWindows Emb嵌入式开发

2009-11-04 16:36:22

Windows Emb解决方案

2009-10-28 09:22:15

2024-03-14 10:22:46

Electron设备IDNode.js 模块

2009-09-03 17:51:34

C#获取设备的ID

2009-03-30 15:52:24

Windows Emb

2009-11-13 09:44:44

Driver ExtrWindows Emb

2009-07-16 14:28:08

Windows EmbIE安全限制

2010-12-16 09:31:08

Windows Emb

2010-05-17 09:48:09

Windows EmbWindows 7
点赞
收藏

51CTO技术栈公众号