亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hdisksn.cpp

?? 這個是集合幾種關于硬盤的序列號的獲取方式的DLL
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
	0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
	0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
	0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
	0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,
};

// 給定一個數據區及其長度,求出它的CRC32檢驗碼
DWORD GenerateCRC32(const BYTE *pData, long nLength)
{
	if(!pData) return 0L;
	DWORD dwCrc32 = 0xFFFFFFFF;
	while((nLength--) > 0)
	{
		dwCrc32 = (dwCrc32 >> 8) ^ Crc32Table[(*pData++) ^ (dwCrc32 & 0xFF)];
	}
	return (~dwCrc32);
}

// 以"與或"的方式使數據流面目全非或完璧歸趙:寫回自身
void CryptXOR(BYTE bySrc[], LONG nLen, BYTE byPatt)
{
	while((--nLen) >= 0) bySrc[nLen] ^= byPatt;
}

// 以"與或"的方式使數據流面目全非或完璧歸趙:寫到新串
void CryptXOR(BYTE byDes[], const BYTE bySrc[], LONG nLen, BYTE byPatt)
{
	memcpy(byDes, bySrc, nLen);
	while((--nLen) >= 0) byDes[nLen] ^= byPatt;
}

// 獲取系統回收站的路徑,包含尾部的反斜杠'\\',入口MAX_PATH長度
INT GetRecyclerDirectory(CHAR chPath[])
{
	if(chPath == NULL) return 0L;
	DWORD dwAttr = (DWORD)(-1);                      // -1表示有錯誤
	BOOL bFind = FALSE;
	BOOL bIsNT = IsWindowsNT();

	char chTemp[2][MAX_PATH] = {"", ""};
	CryptXOR((BYTE *)chTemp[0], PATH_BASE_NT, sizeof(PATH_BASE_NT));
	CryptXOR((BYTE *)chTemp[1], PATH_BASE_9X, sizeof(PATH_BASE_9X));

	int nWhich = bIsNT ? 0 : 1;                      // 正常默認查找
	dwAttr = GetFileAttributes(chTemp[nWhich]);
	bFind = ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) && dwAttr != (DWORD)(-1));

	if(bFind == FALSE)                               // 調換名稱再查
	{
		nWhich = bIsNT ? 1 : 0;
		dwAttr = GetFileAttributes(chTemp[nWhich]);
		bFind = ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) && dwAttr != (DWORD)(-1));
	}

	if(bFind == FALSE)                               // 創建對應目標
	{
		nWhich = bIsNT ? 0 : 1;
		SetFileAttributes(chTemp[nWhich], FILE_ATTRIBUTE_ARCHIVE);
		DeleteFile(chTemp[nWhich]);                  // 確認沒有文件
		SetLastError(ERROR_SUCCESS);
		bFind = (CreateDirectory(chTemp[nWhich], NULL) || (GetLastError() == \
			ERROR_ALREADY_EXISTS));
	}

	INT nLen = 0L;                                   // 獲取臨時路徑
	if(bFind == FALSE) nLen = (INT)GetTempPath(MAX_PATH, chPath);
	else {lstrcpy(chPath, chTemp[nWhich]); nLen = lstrlen(chPath);}

	if(nLen < 1) {lstrcpy(chPath, "C:\\"); nLen = 3L;}
	else if(chPath[nLen - 1] != '\\') {chPath[nLen++] = '\\'; \
		chPath[nLen] = '\0';}                        // 確認尾部'\\'
	SetFileAttributes(chPath, FILE_ATTRIBUTE_SYSTEM | \
		FILE_ATTRIBUTE_HIDDEN); return nLen;         // 系統隱藏長度
}

//-------------------------------------------------------------------------//

// 從指定的端點讀取一個字節
inline static BYTE inportb(WORD p)
{
	DWORD v = 0;
	GetPortVal(p, &v, sizeof(BYTE));
	return (BYTE)v;
}

// 從指定的端點讀取一個字
inline static WORD inportw(WORD p)
{
	DWORD v = 0;
	GetPortVal(p, &v, sizeof(WORD));
	return (WORD)v;
}

// 向指定的端點寫入一個字節
inline static BOOL outportb(WORD p, BYTE v)
{
	return SetPortVal(p, v, sizeof(BYTE));
}

// 向指定的端點寫入一個字
inline static BOOL outportw(WORD p, WORD v)
{
	return SetPortVal(p, v, sizeof(WORD));
}

// 讀取指定CMOS地址的數據
inline static BYTE ReadCmosAddr(BYTE byAddr)
{
	if(!outportb(0x70, byAddr)) return 0x00;         // 發送CMOS地址
	return (inportb(0x71));                          // 讀取對應數據
}

// 精度為毫秒級的延遲函數
inline static void SckMsDelay(DWORD dwDelay)
{
	register DWORD dwStart = GetTickCount();
	for(;;) {if(GetTickCount() - dwStart >= dwDelay) break;}
}

//-------------------------------------------------------------------------//

// 將內部的資源文件導出為二進制的文件
static BOOL ExportResAsBinFile(LPCTSTR lpFile, HMODULE hModule, DWORD dwName, LPCTSTR lpType)
{
	if(!lpFile || !hModule || !lpType) return FALSE;
	BOOL bSuccess = FALSE;
	HRSRC hRes = FindResource(hModule, MAKEINTRESOURCE(dwName), lpType);
	DWORD dwSize = SizeofResource(hModule, hRes);
	HGLOBAL hMem = LoadResource(hModule, hRes);
	BYTE *pData = (BYTE *)LockResource(hMem);
	if(pData && dwSize > 0) bSuccess = SaveBinaryFile(lpFile, pData, dwSize);
	FreeResource(hMem); return bSuccess;
}

// 校驗驅動文件的字節大小是否與程序資源內的一致
static BOOL IsSameSize(DWORD dwDrvID, DWORD dwLength)
{
	switch(dwDrvID)
	{
	case IDR_SMARTVSDVXD: return (dwLength == 17986L);
	case IDR_DISKIOVXD:   return (dwLength ==  7799L);
	case IDR_WINIODLL:    return (dwLength == 57344L);
	default: return TRUE;
	}
}

// 確認VXD設備驅動文件在%WINDOWS%目錄下存在
static void MakeSureDrvExist(char *chFile, DWORD dwDrvID, long bOverWrite = 0)
{
	char chPath[MAX_PATH] = "";                      // 獲取操作系統目錄
	if(!chFile || GetWindowsDirectory(chPath, MAX_PATH) < 1) return;
	HandleSckPath(chPath, 0);                        // 尾部追加'\\'分隔
	lstrcat(chPath, chFile);
	if(MakeFilePath(chPath) == FALSE) return;        // 確認驅動目錄存在
	lstrcpy(chFile, chPath);
	DWORD dwLength = 0L;                             // DRV_驅動文件已在
	if(IsFileExist(chPath, &dwLength) && !bOverWrite &&
		IsSameSize(dwDrvID, dwLength)) return;       // 文件大小是否符合
	ExportResAsBinFile(chPath, g_hHDiskSnDLL, dwDrvID, "HardwareDriver");
}

// 開始WinIo的驅動程序
static HMODULE StartWinIoDriver(void)
{
	HMODULE hWinIoDLL = NULL;                        // WinIo動態庫句柄
	for(long k=0; k<=1; k++)                         // 確認各驅動文件存在
	{
		char chPath[MAX_PATH] = "WinIo.DLL";         // 獲取驅動程序目錄
		MakeSureDrvExist(chPath, IDR_WINIODLL, k);

		hWinIoDLL = LoadLibrary(chPath);             // 裝載WinIo動態庫
		if(hWinIoDLL != NULL)
		{
			InitializeWinIo = (PInitializeWinIo)GetProcAddress(hWinIoDLL, "InitializeWinIo");
			ShutdownWinIo = (PShutdownWinIo)GetProcAddress(hWinIoDLL, "ShutdownWinIo");
			GetPortVal = (PGetPortVal)GetProcAddress(hWinIoDLL, "GetPortVal");
			SetPortVal = (PSetPortVal)GetProcAddress(hWinIoDLL, "SetPortVal");

			if(!InitializeWinIo || !ShutdownWinIo || !GetPortVal ||
				!SetPortVal || !InitializeWinIo())   // 初始化設備程序
			{
				InitializeWinIo = NULL; ShutdownWinIo = NULL;
				GetPortVal = NULL; SetPortVal = NULL;
				FreeLibrary(hWinIoDLL); hWinIoDLL = NULL;
			}
		}
		if(hWinIoDLL != NULL) break;                 // 啟動驅動程序成功
	}
	return hWinIoDLL;                                // 返回驅動程序句柄
}

// 停止WinIo的驅動程序
static void StopWinIoDriver(HMODULE &hWinIoDLL)
{
	if(hWinIoDLL == NULL) return;
	ShutdownWinIo();
	InitializeWinIo = NULL; ShutdownWinIo = NULL;
	GetPortVal = NULL; SetPortVal = NULL;
	FreeLibrary(hWinIoDLL); hWinIoDLL = NULL;
}

// 獲取當前CMOS內記錄的年、月、日、時、分、秒:共8個字節
BOOL GetCurrDate(BYTE *byDate)
{
	if(byDate == NULL) return FALSE;                 // 入口參數檢查
	HMODULE hWinIoDLL = StartWinIoDriver();          // 啟動端口驅動
	if(hWinIoDLL == NULL)                            // 服務啟動失敗
	{
		SYSTEMTIME tm; GetLocalTime(&tm);            // 獲取本地時間
		byDate[0] = (BYTE)(tm.wYear / 100);          // 世紀
		byDate[1] = (BYTE)(tm.wYear % 100);          // 年份
		byDate[2] = (BYTE)(tm.wMonth);               // 月份
		byDate[3] = (BYTE)(tm.wDay);                 // 日期
		byDate[4] = (BYTE)(tm.wSecond);              // 秒數
		byDate[5] = (BYTE)(tm.wHour);                // 小時
		byDate[6] = (BYTE)(tm.wMinute);              // 分數
		byDate[7] = (BYTE)(tm.wSecond);              // 秒數
		return TRUE;                                 // 直接返回真值
	}
	byDate[0] = BCD2DEC(ReadCmosAddr(0x32));         // 世紀
	byDate[1] = BCD2DEC(ReadCmosAddr(0x09));         // 年份
	byDate[2] = BCD2DEC(ReadCmosAddr(0x08));         // 月份
	byDate[3] = BCD2DEC(ReadCmosAddr(0x07));         // 日期
	byDate[4] = BCD2DEC(ReadCmosAddr(0x00));         // 秒數
	byDate[5] = BCD2DEC(ReadCmosAddr(0x04));         // 小時
	byDate[6] = BCD2DEC(ReadCmosAddr(0x02));         // 分數
	byDate[7] = BCD2DEC(ReadCmosAddr(0x00));         // 秒數
	StopWinIoDriver(hWinIoDLL); return TRUE;         // 關閉端口驅動
}

// 獲取兩個日期之間的天數:新值-舊值,頭4個字節
LONG GetDiffDate(const BYTE *byNew, const BYTE *byOld)
{
	if(!byNew || !byOld) return -1;                  // 入口參數檢查
	LONG nDays = ((LONG)(byNew[0] - byOld[0]) * 100L + (byNew[1] - byOld[1])) \
		* 360L + (LONG)(byNew[2] - byOld[2]) * 30L \
		+ (byNew[3] - byOld[3]); return nDays;       // 返回所得天數
}

// 判斷新舊兩組時間是否發生了變化:全部8個字節
BOOL IsDiffTime(const BYTE *byNew, const BYTE *byOld)
{
	if(!byNew || !byOld) return FALSE;
	const DWORD *pdwTm[2] = {(DWORD *)byNew, (DWORD *)byOld};
	if(*pdwTm[0] != *pdwTm[1]) return TRUE;          // 第一個DWORD段
	pdwTm[0] = (DWORD *)(byNew + sizeof(DWORD));
	pdwTm[1] = (DWORD *)(byOld + sizeof(DWORD));
	return ((BOOL)(*pdwTm[0] != *pdwTm[1]));         // 第二個DWORD段
}

// 自定義動態庫入口函數:用于初始化、和釋放資源
BOOL APIENTRY DllMain(HANDLE hModule,                // 參數DLL_映象句柄
					  DWORD  ul_reason_for_call,
					  LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
		case DLL_THREAD_ATTACH:                      // 進程創建了新線程
			break;

		case DLL_THREAD_DETACH:                      // 進程舍棄了一線程
			break;

		case DLL_PROCESS_ATTACH:                     // 進程開始使用_DLL
			g_hHDiskSnDLL = (HMODULE)hModule;
			break;

		case DLL_PROCESS_DETACH:                     // 進程正在釋放_DLL
			g_hHDiskSnDLL = NULL;
			break;
	}
	return TRUE;                                     // 返回給父調用結果
}

/////////////////////////////////////////////////////////////////////////////

// 中斷內:等待硬盤空閑(小于0x80時為空閑狀態)...
static UINT WaitHardDiskIde(USHORT addr) 
{
	BYTE xx = 0x00;
	USHORT wait_addr = addr;
	__asm mov cx, 0xFFFF

Waiting:
	__asm
	{
		mov dx, wait_addr
		in al, dx
		cmp al, 0x80
		jb EndWaiting
		loop Waiting
	}

EndWaiting:
	__asm
	{
		mov xx, al
	}

	return xx;
}

// 中斷內:從IDE[0, 1]控制器讀取主從共4個硬盤的信息數據
static void ReadHardDiskInfoFromCtrlIDE(void)
{
	USHORT base_addr, order_addr, wait_addr;
	USHORT temp;
	BYTE   masl_para, dev_type;
	UINT   xx, i, nWhich;
	IDSECTOR *pHdInfo = (IDSECTOR *)SCK_HD_INFO;
	HD_OPER_ISOK = FALSE; END_HDNO = -1;

	for(nWhich=(UINT)FROM_HDNO; nWhich<=(UINT)TO_HDNO; nWhich++)
	{
		base_addr = IDE_CTRL_PORT[nWhich / 2];
		order_addr = base_addr + 0x06;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满放荡岳乱妇91ww| 欧美一级一区二区| 欧美一区二区女人| 亚洲天堂网中文字| 国产一区在线观看视频| 3d动漫精品啪啪一区二区竹菊| 国产精品丝袜黑色高跟| 久久国产夜色精品鲁鲁99| 欧美亚洲国产一区二区三区| 久久久精品国产免费观看同学| 香蕉av福利精品导航| 91成人免费电影| 国产精品全国免费观看高清| 国产综合色精品一区二区三区| 6080yy午夜一二三区久久| 亚洲精品日韩专区silk| 成人黄色软件下载| 中日韩av电影| 国产99久久久久久免费看农村| 欧美本精品男人aⅴ天堂| 蜜臀国产一区二区三区在线播放 | 欧美唯美清纯偷拍| 国产精品高清亚洲| 成人免费高清在线观看| 国产亚洲人成网站| 国产精品99久久不卡二区| 欧美精品一区二区三| 麻豆成人av在线| 欧美刺激脚交jootjob| 卡一卡二国产精品| 久久先锋影音av鲁色资源网| 加勒比av一区二区| 亚洲精品一线二线三线无人区| 青青青爽久久午夜综合久久午夜| 欧美精品乱码久久久久久| 日韩精品视频网站| 欧美电视剧在线观看完整版| 蜜臀久久久久久久| 精品国产一区二区国模嫣然| 国产剧情一区在线| 国产精品国产成人国产三级| 91免费观看国产| 亚洲一区二区三区四区不卡| 欧美精品久久一区二区三区| 看电视剧不卡顿的网站| 中文字幕电影一区| 日本韩国精品在线| 天堂在线一区二区| 99精品桃花视频在线观看| 欧美国产精品专区| 五月天亚洲精品| 高清shemale亚洲人妖| 精品一区二区免费视频| 亚洲精品中文字幕乱码三区 | 九九在线精品视频| 看片的网站亚洲| 久久精品亚洲精品国产欧美| 国产iv一区二区三区| 亚洲嫩草精品久久| 欧美日韩亚洲综合一区二区三区 | 国产精品大尺度| 欧美中文字幕一区| 国产尤物一区二区在线| 亚洲免费三区一区二区| 日韩一级完整毛片| 成人免费三级在线| 日韩精品一二三| 久久蜜桃av一区精品变态类天堂 | 在线综合+亚洲+欧美中文字幕| 日韩**一区毛片| 国产精品无人区| 欧美一区二区不卡视频| 波多野结衣在线一区| 轻轻草成人在线| 日韩码欧中文字| 久久亚洲免费视频| 欧美日韩精品综合在线| 国产精品91xxx| 美女在线观看视频一区二区| 国产精品久久久久久久久图文区| 日韩一区二区三区高清免费看看| 99精品在线观看视频| 国产制服丝袜一区| 午夜视频在线观看一区二区| 国产精品久久久久久久久免费丝袜| 欧美一区国产二区| 欧美三级日韩在线| 成人av在线影院| 久久精品理论片| 天天av天天翘天天综合网| 国产精品黄色在线观看| 久久综合久久综合九色| 这里只有精品免费| 欧美日本韩国一区| 91国偷自产一区二区三区成为亚洲经典| 精品制服美女丁香| 日日夜夜免费精品| 亚洲成人综合网站| 亚洲在线免费播放| 有码一区二区三区| 亚洲精品免费看| 1000精品久久久久久久久| 久久婷婷久久一区二区三区| 日韩精品中文字幕在线不卡尤物 | 4438亚洲最大| 777色狠狠一区二区三区| 欧美亚洲国产一区二区三区| 色婷婷国产精品| 一本一本大道香蕉久在线精品| www.亚洲在线| 色综合久久综合网欧美综合网| 成人午夜短视频| 成人app下载| 色999日韩国产欧美一区二区| 99久久精品情趣| 91亚洲大成网污www| 91在线国内视频| 色噜噜狠狠成人中文综合| 色一情一伦一子一伦一区| 在线免费观看不卡av| 欧美精品三级日韩久久| 欧美一区二区美女| 久久精品一区八戒影视| 中文字幕精品一区二区精品绿巨人| 日本一区免费视频| 亚洲欧洲国产日本综合| 亚洲夂夂婷婷色拍ww47| 免费成人在线网站| 国产精品影音先锋| 99精品欧美一区二区三区综合在线| 91女人视频在线观看| 在线这里只有精品| 欧美一级国产精品| 中文字幕免费不卡| 亚洲电影一区二区三区| 麻豆成人免费电影| 白白色 亚洲乱淫| 欧美日韩国产系列| 久久久久国产精品人| 亚洲人成精品久久久久| 三级成人在线视频| 丁香桃色午夜亚洲一区二区三区| 99免费精品视频| 7777精品伊人久久久大香线蕉最新版| 日韩欧美国产一区在线观看| 欧美激情一区在线| 亚洲小少妇裸体bbw| 九九国产精品视频| 一本到高清视频免费精品| 欧美一区二区三区色| 国产精品女上位| 天天av天天翘天天综合网 | 久久精品视频一区二区| 亚洲色图在线播放| 黄色精品一二区| 91久久精品一区二区三区| 日韩欧美黄色影院| 亚洲综合精品久久| 国产精品一卡二| 51精品国自产在线| 亚洲乱码一区二区三区在线观看| 久久国产尿小便嘘嘘| 色婷婷久久久综合中文字幕| 欧美不卡在线视频| 亚洲大片一区二区三区| 成人午夜av电影| 精品成人一区二区三区四区| 亚洲精品乱码久久久久| 国内成人自拍视频| 欧美男同性恋视频网站| 中文字幕一区二区三中文字幕| 老司机精品视频线观看86| 日本电影亚洲天堂一区| 国产精品视频观看| 国产一区二区三区四区五区入口 | 欧美精选午夜久久久乱码6080| 国产精品电影一区二区三区| 国产一区二区精品久久99| 7777精品久久久大香线蕉| 亚洲在线成人精品| 色综合天天视频在线观看| 中文字幕色av一区二区三区| 国产一区二区三区在线观看免费| 91精品国产综合久久久久| 洋洋成人永久网站入口| 91在线视频在线| 国产精品久久看| 99久久免费精品高清特色大片| 久久精品网站免费观看| 韩国精品免费视频| 久久综合色综合88| 国产一二精品视频| 久久综合色一综合色88| 久久亚洲精品国产精品紫薇| 九九九久久久精品| 久久久久综合网| 成人免费看的视频| 中文字幕亚洲在| 日本道精品一区二区三区| 亚洲伦理在线免费看|