WinCE获取设备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{
DWORDdwSize;
DWORDdwPresetIDOffset;
DWORDdwPresetIDBytes;
DWORDdwPlatformIDOffset;
DWORDdwPlatformIDBytes;
}DEVICE_ID,
* PDEVICE_ID;

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

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

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

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

代码中的GetDeviceID是自己写的一个获取ID函数,该代码如下:
DWORDGetDeviceID(BYTE * pOutBuf,DWORDdwBufSize,DEVICE_ID * pDeviceID)
{
DWORDdwRead
= 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_DEVICEIDCTL_CODE(FILE_DEVICE_HAL,21,METHOD_BUFFERED,FILE_ANY_ACCESS)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值