日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CE6.0 下获得 SD 卡序列号的方法

發布時間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CE6.0 下获得 SD 卡序列号的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

兩種方法各有優缺點。


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

一般來說,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 plaincopy
  • BOOL?GetStorageID(TCHAR?*ptcCardName,TCHAR?*ptcManufactureID,TCHAR?*ptcSerialNum)??
  • {??
  • ????DWORD?dwSize?=?0;??
  • ????DWORD?dwReqSize?=?0;??
  • ????STORAGE_IDENTIFICATION?StoreInfo;??
  • ????STORAGE_IDENTIFICATION?StoreInfo2;??
  • ????HANDLE?hVolume?=?NULL;??
  • ????BOOL?bRet?=?FALSE;??
  • ??
  • ????BYTE?*pucSerialNo?=?NULL;??
  • ????BYTE?*pucManuID?=?NULL;??
  • ????int?i?=?0;??
  • ??
  • ????ZeroMemory(&StoreInfo,sizeof(STORAGE_IDENTIFICATION));??
  • ??
  • ????hVolume?=?CreateFile(ptcCardName,GENERIC_READ?|?GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);????
  • ????if(NULL?==?hVolume?||?INVALID_HANDLE_VALUE?==?hVolume)????
  • ????{??
  • ????????//?MessageBox(L"Open?Partation?failed!");??
  • ????????RETAILMSG(1,(L"Open?Partation?failed!\r\n"));??
  • ????????return?FALSE;??
  • ????}??
  • ????bRet?=?DeviceIoControl(hVolume,IOCTL_DISK_GET_STORAGEID,??
  • ????????NULL,0,(LPVOID)&StoreInfo,/*sizeof(STORAGE_IDENTIFICATION)*/3000,&dwSize,NULL);??
  • ????if(!bRet)??
  • ????{??
  • ????????DWORD?dwErr?=?GetLastError();??
  • ????????//?TCHAR?tcError[64];??
  • ??
  • ????????//?wsprintf(tcError,L"Device?IO?1?failed:?%d!",dwErr);??
  • ??
  • ????????//?MessageBox(tcError);??
  • ????????RETAILMSG(1,(L"Device?IO?1?failed:?%d!\r\n",dwErr));??
  • ????????CloseHandle(hVolume);??
  • ????????return?FALSE;??
  • ????}??
  • ????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)??
  • ????{??
  • ????????DWORD?dwErr?=?GetLastError();??
  • ????????//?TCHAR?tcError[64];??
  • ??
  • ????????//?wsprintf(tcError,L"Device?IO?2?failed:?%d!",dwErr);??
  • ??
  • ????????//?MessageBox(tcError);??
  • ????????RETAILMSG(1,(L"Device?IO?2?failed:?%d!\r\n",dwErr));??
  • ????????CloseHandle(hVolume);??
  • ??
  • ????????return?FALSE;??
  • ????}??
  • ??
  • ????pucSerialNo?=?(((BYTE?*)&StoreInfo)?+?StoreInfo.dwSerialNumOffset);??
  • ????pucManuID?=?(((BYTE?*)&StoreInfo)?+?StoreInfo.dwManufactureIDOffset);??
  • ????while(pucSerialNo[i]?!=?0?&&?i?<?200?&&?i?<?(int)(dwSize?-?StoreInfo.dwSerialNumOffset))??
  • ????{??
  • ????????ptcSerialNum[i]?=?pucSerialNo[i];??
  • ????????i++;??
  • ????}??
  • ????pucSerialNo[i]?=?'\0?';??
  • ??
  • ????i?=?0;??
  • ????while(pucManuID[i]?!=?0?&&?i?<?200?&&?i?<?(int)(StoreInfo.dwSerialNumOffset?-?StoreInfo.dwManufactureIDOffset))??
  • ????{??
  • ????????ptcManufactureID[i]?=?pucManuID[i];??
  • ????????i++;??
  • ????}??
  • ????pucManuID[i]?=?'\0?';??
  • ??
  • ????CloseHandle(hVolume);??
  • ??
  • ????return?TRUE;???
  • }??
  • 調用示例如下:

    [cpp]?view plaincopy
  • TCHAR?tcSDSerial[256];??
  • ?TCHAR?tcSDManu[256];??
  • ??
  • ?ZeroMemory(tcSDSerial,sizeof(TCHAR)?*?256);??
  • ZeroMemory(tcSDManu,sizeof(TCHAR)?*?256);??
  • ??
  • if(0?==?GetStorageID(SD_PART_NAME,tcSDManu,tcSDSerial))??
  • {??
  • ????MessageBox(tcSDSerial);??
  • ????if(0?==?wcsncmp(VALID_SD_SERIAL_1,tcSDSerial,wcslen(VALID_SD_SERIAL_1)))??
  • ????{??
  • ????}??
  • ????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()?函數獲取詳細的錯誤碼。 ?
  • 總結

    以上是生活随笔為你收集整理的CE6.0 下获得 SD 卡序列号的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人黄色电影网址 | 色婷婷综合网 | 国产做爰xxxⅹ久久久精华液 | 亚洲精品v天堂中文字幕 | 干成人网| 中文字幕精品久久久久人妻红杏ⅰ | 欧美视频免费 | 久久影院国产 | 变态另类ts人妖一区二区 | 色综合久久久无码中文字幕波多 | 午夜精品一区二 | 亚洲熟悉妇女xxx妇女av | av特黄| 国产3p露脸普通话对白 | 欧美一二级| 人妻无码一区二区三区久久99 | 啪啪一区二区 | av av在线 | 久久99精品久久久久久三级 | 亚洲精品国产一区二区 | 日韩美女一区二区三区 | 亚洲国产黄 | 在线免费观看污网站 | 成人免费观看a | 日韩中文字幕一区二区三区四区 | 8ppav| 青青草免费公开视频 | 女同性恋一区二区三区 | 国产寡妇亲子伦一区二区三区四区 | jizzjizz视频| 日韩久久久久久久久 | 亚洲蜜臀av一区二区三区 | 天天操天天看 | 在线午夜av | 亚洲美女视频在线 | 涩涩资源站 | 美女下部无遮挡 | 欧亚av | 黄色片在哪看 | 色哟哟一区二区 | 久久成人精品一区二区 | 久久狠 | 亚洲a精品 | 色婷婷影院 | 牛牛在线 | wwwjavhd| 97精品久久久 | 欧美成人一区二免费视频软件 | 桃花久久 | 黄色网日本 | 国产亚洲精品久久久久久久 | 久久91亚洲精品中文字幕奶水 | 黄色av大片| 久操欧美| 99久久久久成人国产免费 | 越南性xxxx精品hd | 阿v天堂2017| 跪求黄色网址 | 日本午夜小视频 | 传媒视频在线观看 | 男生和女生一起差差差很痛的视频 | 少妇久久久久久久久久 | 日韩女女同性aa女同 | av在线官网| 日本一区二区在线免费 | 9l蝌蚪porny中文自拍 | 啪啪免费视频网站 | 国产原创在线观看 | 日韩五码电影 | 97视频在线观看免费高清完整版在线观看 | 欧美尹人 | 亚洲国产精 | 俺去射 | 成人欧美一区二区三区黑人冫 | 午夜激情福利 | 欧美一区二区在线免费观看 | 绿帽av | 2019中文字幕在线免费观看 | 久久免费小视频 | 日韩人妻精品无码一区二区三区 | 亚洲91久久| 色综合影视 | 在线观看的网站 | 少妇熟女视频一区二区三区 | 精品影片一区二区入口 | 国产免费av网站 | 日韩成人av网站 | 国产精品一区二区欧美 | 欧美一级爱爱 | 日日夜夜精品视频免费 | 特黄特色大片免费播放器使用方法 | 亚洲一区二区三区影视 | 日本黄色特级片 | 久久伊人国产 | 丁香婷婷九月 | 亚洲精品~无码抽插 | 欧洲一区在线 | 久久久久国产综合av天堂 | 国产黄|