經常在罈子裡看到討論軟體加密的帖子,純軟體加密與讀取硬體序列號加密是經常討論到的。
兩種方法各有優缺點。
在通過讀取硬體序列號的方法來加密的方法,受硬體的限制。
一般來說,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...