CE6 0 下獲得 SD 卡序列號的方法

2021-06-25 22:00:14 字數 2552 閱讀 5875

經常在罈子裡看到討論軟體加密的帖子,純軟體加密與讀取硬體序列號加密是經常討論到的。

兩種方法各有優缺點。

在通過讀取硬體序列號的方法來加密的方法,受硬體的限制。

一般來說,cpu和t-flash可能存在序列號。今天研究了一下 windows ce 6.0 下的讀取 sd 卡(t-flash)的方法,以下將自己的實現過程列出來,供有需要的朋友一起學習。

函式的宣告,在.h檔案檔案中:

#define sd_part_name    l"dsk2:"

#define valid_sd_serial_1    l"a7dfb784"

bool getstorageid(tchar *ptccardname,tchar *ptcmanufactureid,tchar *ptcserialnum);

源**如下函式所示:

[cpp]view plain

copy

bool

getstorageid(

tchar

*ptccardname,

tchar

*ptcmanufactureid,

tchar

*ptcserialnum)  

bret = deviceiocontrol(hvolume,ioctl_disk_get_storageid,  

null,0,(lpvoid

)&storeinfo,

/*sizeof(storage_identification)*/

3000,&dwsize,null);  

if(!bret)  

dwreqsize = storeinfo.dwsize;  

assert(dwreqsize > 0);  

dwsize = 0;  

storeinfo2.dwsize = dwreqsize;  

bret = deviceiocontrol(hvolume,ioctl_disk_get_storageid,  

null,0,(lpvoid

)&storeinfo,dwreqsize,&dwsize,null);     

if(false == bret)  

pucserialno = (((byte

*)&storeinfo) + storeinfo.dwserialnumoffset);  

pucmanuid = (((byte

*)&storeinfo) + storeinfo.dwmanufactureidoffset);  

while

(pucserialno[i] != 0 && i < 200 && i < (

int)(dwsize - storeinfo.dwserialnumoffset))  

pucserialno[i] = '\0 '

;  i = 0;  

while

(pucmanuid[i] != 0 && i < 200 && i < (

int)(storeinfo.dwserialnumoffset - storeinfo.dwmanufactureidoffset))  

pucmanuid[i] = '\0 '

;  closehandle(hvolume);  

return

true;   

}  

呼叫示例如下:

[cpp]view plain

copy

tchar

tcsdserial[256];  

tchar

tcsdmanu[256];  

zeromemory(tcsdserial,sizeof

(tchar

) * 256);  

zeromemory(tcsdmanu,sizeof

(tchar

) * 256);  

if(0 == getstorageid(sd_part_name,tcsdmanu,tcsdserial))  

else

}  實現過程中,遇到以下錯誤:  

(1) 當將呼叫**修改為: if

(getstorageid(l

"dsk1:"

,csmanufactureid,csserialid)) 時(dsk1 是存在的)產生如下錯誤:  

error 50: 不支援請求。   

(2) 當將實現**中的 deviceiocontrol()函式 修改為如下時:  

bret = deviceiocontrol(hvolume,ioctl_disk_get_storageid,  

null,0,(lpvoid

)&storeinfo,

sizeof

(storage_identification),&dwsize,null);  

產生如下錯誤:error 122: 傳遞給系統呼叫的資料區域太小。所以,建議各位程式在編碼時,盡量對函式的返回值進行判斷。在出錯的狀態,一定要呼叫 getlasterror() 函式獲取詳細的錯誤碼。  

ce 6 0 鏈結錯誤

今天在ce 6.0中新增了乙個驅動,在buid我的驅動的時候,顯示有鏈結錯誤。是我驅動中呼叫fsdmgr advertiseinte ce,等幾個fsdmgr中的函式,鏈結有問題。由於以前在網上看到的資料,說產生鏈結錯誤,很有可能是環境配置有問題。基於此,我換了個機器,重新配置環境,結果錯誤照常產生...

友善mini2440終於發布CE6 0的BSP了!

去年就開始買板子了,當時就把mini2440玩了一遍,說實話,沒有什麼感覺,後來才知道原來就是4.2的bsp包,但是當時主要想學習linux,可是今年年初,老闆卻由於專案的需要讓我研究wince,由於老闆平時很忙,幾乎很少有時間來管我,我感覺有種放羊的感覺!哎,悲哀啊!前段時間看晚上有許多人在進行c...

如何獲得WM5,CE裝置號

如何獲得wm5,ce裝置號 include define max loadstring 100 bool getdeviceid guid pguid void onbutton1 fres kerneliocontrol ioctl hal get deviceid,null,0,arroutbu...