日韩性视频-久久久蜜桃-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 卡序列号的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产欧美视频一区二区 | 精品人体无码一区二区三区 | 亚洲自拍偷拍欧美 | 国产日韩欧美在线 | 蜜桃视频在线观看www | 欧美一卡二卡三卡 | 少妇一级淫片免费放播放 | 国产成人av一区二区三区在线观看 | 99自拍偷拍视频 | 久久久91精品国产一区二区三区 | 99国产精品久久久久久久成人 | 欧美视频一区二区三区 | 涩涩视频免费看 | 国产成人+综合亚洲+天堂 | 伊人日韩| 久久国产精品精品国产 | 6699嫩草久久久精品影院 | 亚洲第一激情 | 久久密桃 | 91久久精品在线 | 美女91网站 | 亚洲精品二区三区 | 国产精品白丝喷水在线观看 | 性欧美在线 | 不卡视频国产 | 一区二区三区欧美视频 | 亚洲精品在线免费播放 | 日韩一区二区三区精品视频 | a视频在线观看免费 | 国产欧美一区二区精品性色 | 久久久久无码精品国产 | mm131在线 | 国产xxx在线 | 欧美一二三区视频 | 91欧美在线 | 牛牛视频在线观看 | 亚洲国产精品视频一区 | yjizz视频 | 黄色大片免费观看 | 狠狠天天 | 久久午夜鲁丝片 | 一区二区av电影 | 一区二区三区高清 | 免费毛片网站 | 亚洲五月花 | 色丁香在线| 亚洲国产福利 | 无码国产精品一区二区色情男同 | 日韩无码精品一区二区 | 久久99久久99精品免观看粉嫩 | 久久久久久综合网 | 中国一区二区三区 | 91资源在线观看 | 久久久综合精品 | 女人久久 | 国产综合在线观看视频 | 亚洲色图激情小说 | 丁香花婷婷 | 四虎图库 | 鲁一鲁av | 黑人添美女bbb添高潮了 | 超碰不卡| 亚洲精品国产精品乱码桃花 | 卡一卡二在线视频 | 九九在线观看视频 | 国产农村妇女毛片精品久久 | 日韩成人一级片 | 91精品国产综合久久久蜜臀粉嫩 | 91久| 欧美色图亚洲天堂 | 日韩电影第一页 | 久久久久久久久久久久久久久 | 俺也去网站 | 无码精品在线观看 | 国产成人无码aa精品一区 | 少妇精品亚洲一区二区成人 | 免费亚洲一区 | 黄色一级片网站 | 国产3p精品一区 | 日韩不卡毛片 | 欧美人xxxx | 日韩久久久精品 | 99自拍视频 | 中文字幕乱码免费 | 亚洲国产黄 | 大尺度床戏揉捏胸视频 | 久久伊人超碰 | 欧美激情图片 | 本庄优花番号 | 国产精品精品国产 | www.av小说 | 一级片一级片 | 欧美亚洲精品在线观看 | 一区二区久久精品66国产精品 | 日韩精品一区在线视频 | 久久黄色免费视频 | 无码人妻精品一区二区三区99v | 伊人久久青青草 | 我的邻居在线观看 |