英创信息技术读取EM9170工控主板的唯一设备ID号

描述

EM9170是一款基于FreeScale iMX257芯片,预装Windows CE6.0的通用工控主板。EM9170在为客户应用提供了更为丰富的资源,以满足客户更多的专业需求的同时,还在客户应用程序保护方面,准备了多种手段。保护客户应用程序的基本方法是对主板进行加密码设置,并在应用程序中采用专用手段进行验证,客户可在英创网站进一步了解进行密码设置的流程。客户密码设置是面向客户的,即每一个客户所购买的所有EM9170主板产品,其密码是相同的,本文则主要介绍如何读取每个EM9170主板上唯一的设备ID号的方法。唯一设备ID号不仅能用于客户应用程序的保护,同时还能方便客户对设备的维护管理。

读取设备ID号,需要使用微软的GUID数据结构:

typedef struct _GUID {
        unsigned long Data1;
        unsigned short Data2;
        unsigned short Data3;
        unsigned char Data4[8];
} GUID, UUID;

读取EM9170主板上的唯一ID号的范例代码如下:

#include 'stdafx.h'
#include
#include
#include
#define IOCTL_HAL_GET_DEVICE_INFO \ CTL_CODE(FILE_DEVICE_HAL, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
extern 'C' __declspec(dllimport) BOOL KernelIoControl(DWORD dwIoControlCode,
        LPVOID pInBuffer,
        DWORD InSize,
        LPVOID pOutBuffer,
        DWORD OutSize,
        LPDWORD pReturnBytes);
int _tmain(int argc, _TCHAR* argv[])
{
        GUID uuid;
        DWORD dwSize = sizeof(uuid);
        UINT32 spiValue = SPI_GETUUID;
        UINT32 i;
        printf('Get Device Info V1.0\r\n');
        if(FALSE==KernelIoControl(IOCTL_HAL_GET_DEVICE_INFO, &spiValue, sizeof(spiValue), &uuid,dwSize, &dwSize))
        {
                printf('KernelIoControl->IOCTL_HAL_GET_DEVICE_INFO failed\r\n'); 
                return -1;
        }
        // printd Device ID
        for(i = 0; i < sizeof(uuid.Data4); i++)
        {
                printf('uuid.Data4[%d] = 0x%02x\r\n', i, uuid.Data4[i]);
        }
        return 0;
}

GUID结构中的uuid.Data4为64-bit的设备唯一ID号。Data1–Data3为系统保留数据,应用程序可不关心。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分