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

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

?? diskserialnumber.cpp

?? 本程序是VC為平臺開發的股票資訊系統
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
				case 't': case 'T': id += 29; break;
				case 'u': case 'U': id += 30; break;
				case 'v': case 'V': id += 31; break;
				case 'w': case 'W': id += 32; break;
				case 'x': case 'X': id += 33; break;
				case 'y': case 'Y': id += 34; break;
				case 'z': case 'Z': id += 35; break;
			}	
		}
	}

	return id;
}

BOOL CDiskSerialNumber::ReadIdeDriveAsScsiDriveInNT()
{
	BOOL done = FALSE;
	HANDLE hScsiDriveIOCTL = 0;

	// Try to get a handle to PhysicalDrive IOCTL, report failure
	// and exit if can't.
	char driveName[256] = _T("\\\\.\\Scsi0:");

	// Windows NT, Windows 2000, any rights should do
	hScsiDriveIOCTL = CreateFile(driveName,
		GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | 
		FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

	if(hScsiDriveIOCTL != INVALID_HANDLE_VALUE)
	{
		char buffer[sizeof(SRB_IO_CONTROL) + SENDIDLENGTH];
		SRB_IO_CONTROL *p = (SRB_IO_CONTROL *)buffer;
		SENDCMDINPARAMS *pin = (SENDCMDINPARAMS *)(buffer + sizeof(SRB_IO_CONTROL));
		DWORD dummy;
   
		memset(buffer, 0, sizeof(buffer));
		p->HeaderLength = sizeof(SRB_IO_CONTROL);
		p->Timeout = 10000;
		p->Length = SENDIDLENGTH;
		p->ControlCode = IOCTL_SCSI_MINIPORT_IDENTIFY;
		strncpy((char *)p->Signature, _T("SCSIDISK"), 8);
  
		pin->irDriveRegs.bCommandReg = IDE_ATA_IDENTIFY;
		pin->bDriveNumber = 0;

		if(DeviceIoControl(hScsiDriveIOCTL, 
			IOCTL_SCSI_MINIPORT, buffer,
			sizeof(SRB_IO_CONTROL) + sizeof(SENDCMDINPARAMS) - 1,
			buffer, sizeof (SRB_IO_CONTROL) + SENDIDLENGTH,
			&dummy, NULL))
		{
			SENDCMDOUTPARAMS *pOut = (SENDCMDOUTPARAMS *)(buffer + sizeof(SRB_IO_CONTROL));
			IDSECTOR *pId = (IDSECTOR *)(pOut->bBuffer);
			if(pId->sModelNumber[0])
			{
				DWORD diskdata[256];
				int ijk = 0;
				USHORT *pIdSector = (USHORT *)pId;
          
				for(ijk = 0; ijk < 256; ijk++)
					diskdata [ijk] = pIdSector [ijk];

				strcpy(HardDriveSerialNumber, ConvertToString (diskdata, 10, 19));

				done = TRUE;
			}
		}
	}
	CloseHandle(hScsiDriveIOCTL);

	return done;
}

BOOL CDiskSerialNumber::ReadDrivePortsInWin9X()
{
	BOOL done = FALSE;

	InitializeWinIo();   

	// Get IDE Drive info from the hardware ports
	// loop thru all possible drives
	DWORD diskdata[256];
	WORD  baseAddress = 0x1f0;   //  Base address of drive controller 
	DWORD portValue = 0;
	int waitLoop = 0;
	int index = 0;
 
	// Wait for controller not busy 
	waitLoop = 100000;
	while(--waitLoop > 0)
	{
		GetPortVal((WORD)(baseAddress + 7), &portValue, (BYTE)1);
		// drive is ready
		if((portValue & 0x40) == 0x40) break;
		// previous drive command ended in error
		if((portValue & 0x01) == 0x01) break;
	}

	// Set Master or Slave drive
	SetPortVal((WORD)(baseAddress + 6), 0xA0, 1);

	// Get drive info data
	SetPortVal((WORD)(baseAddress + 7), 0xEC, 1);

	// Wait for data ready 
	waitLoop = 100000;
	while(--waitLoop > 0)
	{
		GetPortVal((WORD)(baseAddress + 7), &portValue, 1);
		// see if the drive is ready and has it's info ready for us
		if((portValue & 0x48) == 0x48) break;
		// see if there is a drive error
		if((portValue & 0x01) == 0x01) break;
	}

	// read drive id information
	for(index = 0; index < 256; index++)
	{
		diskdata[index] = 0;   //  init the space
		GetPortVal(baseAddress, &(diskdata[index]), 2);
	}		
   
	strcpy(HardDriveSerialNumber, ConvertToString (diskdata, 10, 19));

	done = TRUE;

	ShutdownWinIo();

	return done;
}

BOOL CDiskSerialNumber::InitializeWinIo()
{
	char szExePath[MAX_PATH];
	PSTR pszSlash;

	IsNT = IsWinNT();

	if(IsNT)
	{
		if(!GetModuleFileName(GetModuleHandle(NULL), szExePath, sizeof(szExePath)))
			return FALSE;

		pszSlash = strrchr(szExePath, '\\');

		if(pszSlash)
			pszSlash[1] = 0;
		else
			return FALSE;

		strcat(szExePath, _T("winio.sys"));

		// UnloadDeviceDriver(_T("WINIO"));
		// if (!LoadDeviceDriver(_T("WINIO"), szExePath, &hDriver))
		// return FALSE;
	}
  
	IsWinIoInitialized = TRUE;

	return TRUE;
}

BOOL CDiskSerialNumber::GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize)
{
	BOOL Result;
	DWORD dwBytesReturned;
	struct tagPort32Struct Port32Struct;

	if(IsNT)
	{
		if(!IsWinIoInitialized)
			return FALSE;

		Port32Struct.wPortAddr = wPortAddr;
		Port32Struct.bSize = bSize;

		if(!DeviceIoControl(hDriver, IOCTL_WINIO_READPORT, &Port32Struct,
			sizeof(struct tagPort32Struct), &Port32Struct, 
			sizeof(struct tagPort32Struct), &dwBytesReturned, NULL))
			return FALSE;
		else
			*pdwPortVal = Port32Struct.dwPortVal;
	}
	else
	{
		Result = CallRing0((PVOID)Ring0GetPortVal, wPortAddr, pdwPortVal, bSize);

		if(Result == FALSE)
			return FALSE;
	}

  	return TRUE;
}

BOOL CDiskSerialNumber::SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize)
{
	DWORD dwBytesReturned;
	struct tagPort32Struct Port32Struct;

	if(IsNT)
	{
		if(!IsWinIoInitialized)
			return FALSE;

		Port32Struct.wPortAddr = wPortAddr;
		Port32Struct.dwPortVal = dwPortVal;
		Port32Struct.bSize = bSize;

		if(!DeviceIoControl(hDriver, IOCTL_WINIO_WRITEPORT, &Port32Struct,
			sizeof(struct tagPort32Struct), NULL, 0, &dwBytesReturned, NULL))
			return FALSE;
	}
	else
		return CallRing0((PVOID)Ring0SetPortVal, wPortAddr, &dwPortVal, bSize);
	
	return TRUE;
}

void CDiskSerialNumber::ShutdownWinIo()
{
// if (IsNT)
// UnloadDeviceDriver(_T("WINIO"));
}

BOOL CDiskSerialNumber::IsWinNT()
{
	OSVERSIONINFO OSVersionInfo;
	
	OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	
	GetVersionEx(&OSVersionInfo);
	
	return OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;
}

// Makes it possible to call ring 0 code from a ring 3 application.
BOOL CDiskSerialNumber::CallRing0(PVOID pvRing0FuncAddr, 
		WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize)
{
	struct GDT_DESCRIPTOR *pGDTDescriptor;
	struct GDTR gdtr;
	WORD CallgateAddr[3];
	WORD wGDTIndex = 1;

	_asm Sgdt[gdtr]

	// Skip the null descriptor
	pGDTDescriptor = (struct GDT_DESCRIPTOR *)(gdtr.dwGDTBase + 8);

	// Search for a free GDT descriptor
	for(wGDTIndex = 1; wGDTIndex < (gdtr.wGDTLimit / 8); wGDTIndex++)
	{
		if(pGDTDescriptor->Type == 0 &&
			pGDTDescriptor->System == 0 &&
			pGDTDescriptor->DPL == 0 &&
			pGDTDescriptor->Present == 0)
		{
			// Found one !
			// Now we need to transform this descriptor into a callgate.
			// Note that we're using selector 0x28 since it corresponds
			// to a ring 0 segment which spans the entire linear address
			// space of the processor (0-4GB).
			struct CALLGATE_DESCRIPTOR *pCallgate;
			pCallgate =	(struct CALLGATE_DESCRIPTOR *)pGDTDescriptor;
			pCallgate->Offset_0_15 = LOWORD(pvRing0FuncAddr);
			pCallgate->Selector = 0x28;
			pCallgate->ParamCount =	0;
			pCallgate->Unused = 0;
			pCallgate->Type = 0xc;
			pCallgate->System = 0;
			pCallgate->DPL = 3;
			pCallgate->Present = 1;
			pCallgate->Offset_16_31 = HIWORD(pvRing0FuncAddr);

			// Prepare the far call parameters
			CallgateAddr[0] = 0x0;
			CallgateAddr[1] = 0x0;
			CallgateAddr[2] = (wGDTIndex << 3) | 3;

			// Please fasten your seat belts!
			// We're about to make a hyperspace jump into RING 0.
			_asm Mov DX, [wPortAddr]
			_asm Mov EBX, [pdwPortVal]
			_asm Mov CL, [bSize]
			_asm Call FWORD PTR [CallgateAddr]

			// We have made it !
			// Now free the GDT descriptor
			memset(pGDTDescriptor, 0, 8);

			// Our journey was successful. Seeya.
      		return TRUE;
		}

		// Advance to the next GDT descriptor
		pGDTDescriptor++; 
	}
	// Whoops, the GDT is full
	return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类小说一区二区三区| 欧美色倩网站大全免费| 欧美午夜不卡在线观看免费| 337p亚洲精品色噜噜狠狠| 欧美韩国日本综合| 亚洲不卡av一区二区三区| 国产成人久久精品77777最新版本| 欧美午夜影院一区| 国产精品久久久久久久久免费桃花| 午夜精品在线视频一区| 99久免费精品视频在线观看| 51精品秘密在线观看| 亚洲综合久久av| 风间由美一区二区三区在线观看| 91精品国产一区二区三区蜜臀| 亚洲欧美日韩综合aⅴ视频| 国产精品456| 日韩美女视频一区二区在线观看| 一区二区三区电影在线播| 高清成人在线观看| 久久精品人人做人人综合| 日本在线不卡视频一二三区| 欧美在线影院一区二区| 亚洲欧洲三级电影| www..com久久爱| 国产精品天干天干在线综合| 精彩视频一区二区| 日韩午夜激情免费电影| 婷婷国产在线综合| 色婷婷一区二区三区四区| 中文字幕一区二区三区在线不卡| 国产一区二区调教| 精品国产制服丝袜高跟| 麻豆精品新av中文字幕| 日韩一区二区三区免费看| 青青草国产成人av片免费| 91精品国产综合久久精品 | 在线观看网站黄不卡| 国产精品色噜噜| gogogo免费视频观看亚洲一| 国产精品欧美经典| 色哟哟日韩精品| 亚洲韩国精品一区| 91精品国产一区二区| 日韩av电影免费观看高清完整版 | 亚洲在线成人精品| 欧美视频一区在线| 午夜精品久久久久久久蜜桃app| 精品视频资源站| 日韩av在线播放中文字幕| 精品少妇一区二区三区在线视频| 久久精品理论片| 久久久综合九色合综国产精品| 国产成人a级片| 国产精品乱子久久久久| 色综合久久久网| 香蕉加勒比综合久久| 欧美xxxxxxxx| 成人影视亚洲图片在线| 一区二区三区欧美视频| 91精品国产一区二区三区香蕉| 激情久久久久久久久久久久久久久久| 久久久精品tv| 在线日韩av片| 国内精品免费**视频| 一区精品在线播放| 日韩欧美精品在线| 北条麻妃一区二区三区| 五月天中文字幕一区二区| 久久久亚洲精华液精华液精华液| 丰满少妇在线播放bd日韩电影| 亚洲国产精品一区二区久久恐怖片| 欧美成人三级在线| 色视频一区二区| 九九在线精品视频| 亚洲欧洲性图库| 精品国产91亚洲一区二区三区婷婷| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久精品国产77777蜜臀| 中文字幕中文在线不卡住| 制服丝袜av成人在线看| 成人开心网精品视频| 麻豆传媒一区二区三区| 亚洲天堂成人网| 久久久精品tv| 91精品国产色综合久久| 91在线小视频| 国产成人av影院| 日韩va欧美va亚洲va久久| 亚洲视频在线观看三级| 精品国产一区久久| 欧美日本乱大交xxxxx| 91在线观看免费视频| 国内精品第一页| 日韩综合在线视频| 一区二区三区在线观看欧美| 久久久亚洲综合| 精品免费一区二区三区| 欧美一区二区私人影院日本| 色婷婷一区二区| 91麻豆精东视频| 成人黄色av电影| 国产老妇另类xxxxx| 免费国产亚洲视频| 日韩国产在线观看| 亚洲影院久久精品| 亚洲人成亚洲人成在线观看图片 | 亚洲激情综合网| 日本一区二区三区电影| 精品福利一二区| 日韩精品一区二区三区视频| 91精品国产欧美一区二区 | 99久久精品久久久久久清纯| 国产一二三精品| 国产成人一区在线| 激情文学综合网| 狠狠色丁香久久婷婷综合_中 | 精品欧美一区二区久久| 正在播放亚洲一区| 日韩三级精品电影久久久| 欧美一区三区四区| 欧美一级爆毛片| 久久久蜜桃精品| 亚洲国产经典视频| ...xxx性欧美| 一区二区三区毛片| 天天色图综合网| 久久国内精品视频| 国产在线视频一区二区| 国产福利精品导航| av一区二区三区黑人| 色婷婷av久久久久久久| 欧美性xxxxxxxx| 日韩三级免费观看| 中文字幕久久午夜不卡| 亚洲蜜臀av乱码久久精品| 亚洲成人免费电影| 久久精品免费观看| av在线一区二区三区| 在线视频一区二区免费| 777久久久精品| 国产亚洲精品超碰| 亚洲女同一区二区| 日韩黄色在线观看| 国产精品2024| 欧美性色aⅴ视频一区日韩精品| 欧美日韩国产经典色站一区二区三区| 91精品欧美一区二区三区综合在 | 国产成人a级片| 欧美综合色免费| 精品国产91洋老外米糕| 17c精品麻豆一区二区免费| 日韩电影在线观看电影| 国产精品一二三区在线| 欧美在线视频日韩| 精品日韩成人av| 一区二区三区丝袜| 国产中文字幕精品| 欧美日韩久久久一区| 久久精品视频在线免费观看| 亚洲午夜国产一区99re久久| 九色综合国产一区二区三区| 色天使久久综合网天天| 久久先锋影音av| 丝袜美腿亚洲综合| 9i在线看片成人免费| 欧美一级一区二区| 亚洲黄色在线视频| 国产91精品欧美| 欧美成人性战久久| 午夜久久久久久久久久一区二区| 成人手机电影网| 欧美va亚洲va香蕉在线| 亚洲国产人成综合网站| 成人黄色在线视频| 精品剧情v国产在线观看在线| 亚洲精品美腿丝袜| 不卡一卡二卡三乱码免费网站| 日韩三级免费观看| 五月婷婷久久丁香| 91福利资源站| 亚洲情趣在线观看| eeuss鲁片一区二区三区在线看| 日韩欧美国产午夜精品| 天天做天天摸天天爽国产一区| 色噜噜狠狠色综合中国| 中文字幕在线不卡| 成人高清av在线| 国产亚洲综合性久久久影院| 久久综合综合久久综合| 日韩欧美中文字幕公布| 亚洲www啪成人一区二区麻豆| 91久久国产综合久久| 亚洲欧洲日本在线| gogo大胆日本视频一区| 中文字幕一区二区三区在线不卡| 成人激情开心网| 国产精品日产欧美久久久久| 国产激情精品久久久第一区二区| 26uuu另类欧美亚洲曰本|