在Windows Embedded中擷取裝置ID

來源:互聯網
上載者:User
    本文向您介紹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。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.