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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? diskserialnumber.cpp

?? 本程序是VC為平臺(tái)開發(fā)的股票資訊系統(tǒng)
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
// DiskSerialNumber.cpp : implementation file
//

#include "stdafx.h"
#include "DiskSerialNumber.h"

#include <winioctl.h>
#include "port32.h"
#include "winio.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// These are our ring 0 functions responsible for tinkering with the hardware ports.
// They have a similar privilege to a Windows VxD and are therefore free to access
// protected system resources (such as the page tables) and even place calls to
// exported VxD services.
__declspec(naked) void Ring0GetPortVal()
{
	_asm
	{
		Cmp CL, 1
		Je ByteVal
		Cmp CL, 2
		Je WordVal
		Cmp CL, 4
		Je DWordVal

	ByteVal:
		In AL, DX
		Mov [EBX], AL
		Retf

	WordVal:
		In AX, DX
		Mov [EBX], AX
		Retf

	DWordVal:
		In EAX, DX
		Mov [EBX], EAX
		Retf
	}
}

__declspec(naked) void Ring0SetPortVal()
{
	_asm
	{
		Cmp CL, 1
		Je ByteVal
		Cmp CL, 2
		Je WordVal
		Cmp CL, 4
		Je DWordVal

	ByteVal:
		Mov AL, [EBX]
		Out DX, AL
		Retf

	WordVal:
		Mov AX, [EBX]
		Out DX, AX
		Retf

	DWordVal:
		Mov EAX, [EBX]
		Out DX, EAX
		Retf
	}
}

/////////////////////////////////////////////////////////////////////////////
// CDiskSerialNumber

CDiskSerialNumber::CDiskSerialNumber()
{
	IsWinIoInitialized = FALSE;
}

CDiskSerialNumber::~CDiskSerialNumber()
{
}

/////////////////////////////////////////////////////////////////////////////
// CDiskSerialNumber message handlers

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

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

	// Windows NT, Windows 2000, must have admin rights
	hPhysicalDriveIOCTL = CreateFile(driveName,
		GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | 
		FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

	if(hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
	{
		GETVERSIONOUTPARAMS VersionParams;
		DWORD cbBytesReturned = 0;

		// Get the version, etc of PhysicalDrive IOCTL
		memset((void*)&VersionParams, 0, sizeof(VersionParams));
		if(!DeviceIoControl(hPhysicalDriveIOCTL, DFP_GET_VERSION,
			NULL, 0, &VersionParams, sizeof(VersionParams),
			&cbBytesReturned, NULL))
		{
			// printf (_T("DFP_GET_VERSION failed for drive %d\n"), i);
			// continue;
		}

		// If there is a IDE device at number "i" issue commands
		// to the device
		if(VersionParams.bIDEDeviceMap > 0)
		{
			BYTE bIDCmd = 0; // IDE or ATAPI IDENTIFY cmd
			SENDCMDINPARAMS  scip;

			// Now, get the ID sector for all IDE devices in the system.
			// If the device is ATAPI use the IDE_ATAPI_IDENTIFY command,
			// otherwise use the IDE_ATA_IDENTIFY command
			bIDCmd = (VersionParams.bIDEDeviceMap >> 0 & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;
			memset(&scip, 0, sizeof(scip));
			memset(IdOutCmd, 0, sizeof(IdOutCmd));
			if(DoIDENTIFY(hPhysicalDriveIOCTL, &scip, 
				(PSENDCMDOUTPARAMS)&IdOutCmd, (BYTE)bIDCmd, 
				(BYTE)0, &cbBytesReturned))
			{
				DWORD diskdata [256];
				int ijk = 0;
				USHORT *pIdSector = (USHORT *)((PSENDCMDOUTPARAMS)IdOutCmd)->bBuffer;
				for(ijk = 0; ijk < 256; ijk++)
					diskdata [ijk] = pIdSector [ijk];
				strcpy(HardDriveSerialNumber, ConvertToString(diskdata, 10, 19));
				done = TRUE;
			}
		}			
		CloseHandle(hPhysicalDriveIOCTL);
	}

	return done;
}

// Send an IDENTIFY command to the drive
// bDriveNum = 0-3
// bIDCmd = IDE_ATA_IDENTIFY or IDE_ATAPI_IDENTIFY
BOOL CDiskSerialNumber::DoIDENTIFY(HANDLE hPhysicalDriveIOCTL, 
		PSENDCMDINPARAMS pSCIP, PSENDCMDOUTPARAMS pSCOP, 
		BYTE bIDCmd, BYTE bDriveNum, PDWORD lpcbBytesReturned)
{
	// Set up data structures for IDENTIFY command.
	pSCIP->cBufferSize = IDENTIFY_BUFFER_SIZE;
	pSCIP->irDriveRegs.bFeaturesReg = 0;
	pSCIP->irDriveRegs.bSectorCountReg = 1;
	pSCIP->irDriveRegs.bSectorNumberReg = 1;
	pSCIP->irDriveRegs.bCylLowReg = 0;
	pSCIP->irDriveRegs.bCylHighReg = 0;

	// Compute the drive number.
	pSCIP->irDriveRegs.bDriveHeadReg = 0xA0 | ((bDriveNum & 1) << 4);

	// The command can either be IDE identify or ATAPI identify.
	pSCIP->irDriveRegs.bCommandReg = bIDCmd;
	pSCIP->bDriveNumber = bDriveNum;
	pSCIP->cBufferSize = IDENTIFY_BUFFER_SIZE;

	return (DeviceIoControl(hPhysicalDriveIOCTL, DFP_RECEIVE_DRIVE_DATA,
		(LPVOID) pSCIP, sizeof(SENDCMDINPARAMS) - 1, (LPVOID) pSCOP,
		sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1, 
		lpcbBytesReturned, NULL));
}

char *CDiskSerialNumber::ConvertToString(DWORD diskdata[256], 
		int firstIndex, int lastIndex)
{
	static char string[1024];
	int index = 0;
	int position = 0;

	// each integer has two characters stored in it backwards
	for(index = firstIndex; index <= lastIndex; index++)
	{
		// get high byte for 1st character
		string [position] = (char)(diskdata[index]/256);
		position++;

		//  get low byte for 2nd character
		string [position] = (char)(diskdata[index]%256);
		position++;
	}

	// end the string 
	string[position] = '\0';

	// cut off the trailing blanks
	for(index = position - 1; index > 0 && ' ' == string[index]; index--)
		string[index] = '\0';

	return string;
}

long CDiskSerialNumber::GetDiskSerialNo()
{
	__int64 id = GetHardDriveSerialNumber();
	if(id <= 0)
		id = GetSoftDriveSerialNumber();
	else // make sure no bigger than 16^7
		if(id > 268435455) id %= 268435456;
	id ^= 0x01076032;
	
	return (long)id;
}

long CDiskSerialNumber::GetSoftDriveSerialNumber()
{
	// Get driver c: serial number
	LPCTSTR lpRootPathName = _T("c:\\");

	// Get volume label
	LPTSTR lpVolumeNameBuffer = new char[12];
	DWORD nVolumeNameSize = 12;

	DWORD VolumeSerialNumber; // soft driver serial number
	DWORD MaximumComponentLength;
	LPTSTR lpFileSystemNameBuffer = new char[10];
	DWORD nFileSystemNameSize = 10;
	DWORD FileSystemFlags;
	GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer,
		nVolumeNameSize,&VolumeSerialNumber, &MaximumComponentLength,
		&FileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);

	return VolumeSerialNumber;
}

__int64 CDiskSerialNumber::GetHardDriveSerialNumber()
{
	BOOL done = FALSE;
	__int64 id = 0;

	strcpy (HardDriveSerialNumber, _T(""));
	// this works under WinNT4 or Win2K if you have admin rights
	done = ReadPhysicalDriveInNT();
	// this should work in WinNT or Win2K if previous did not work
	// this is kind of a backdoor via the SCSI mini port driver into
	// the IDE drives
	if(!done) done = ReadIdeDriveAsScsiDriveInNT();

	// this works under Win9X and calls WINIO.DLL
	if(!done) done = ReadDrivePortsInWin9X();

	if(done)
	{
		char *p = HardDriveSerialNumber;
		// WriteConstantString ("HardDriveSerialNumber", HardDriveSerialNumber);
		// ignore first 5 characters from western digital hard drives if
		// the first four characters are WD-W
		if(!strncmp(HardDriveSerialNumber, _T("WD-W"), 4)) p += 5;
		for( ; p && *p; p++)
		{
			if('-' == *p) continue;
			id *= 10;
			switch (*p)
			{
				case '0': id += 0; break;
				case '1': id += 1; break;
				case '2': id += 2; break;
				case '3': id += 3; break;
				case '4': id += 4; break;
				case '5': id += 5; break;
				case '6': id += 6; break;
				case '7': id += 7; break;
				case '8': id += 8; break;
				case '9': id += 9; break;
				case 'a': case 'A': id += 10; break;
				case 'b': case 'B': id += 11; break;
				case 'c': case 'C': id += 12; break;
				case 'd': case 'D': id += 13; break;
				case 'e': case 'E': id += 14; break;
				case 'f': case 'F': id += 15; break;
				case 'g': case 'G': id += 16; break;
				case 'h': case 'H': id += 17; break;
				case 'i': case 'I': id += 18; break;
				case 'j': case 'J': id += 19; break;
				case 'k': case 'K': id += 20; break;
				case 'l': case 'L': id += 21; break;
				case 'm': case 'M': id += 22; break;
				case 'n': case 'N': id += 23; break;
				case 'o': case 'O': id += 24; break;
				case 'p': case 'P': id += 25; break;
				case 'q': case 'Q': id += 26; break;
				case 'r': case 'R': id += 27; break;
				case 's': case 'S': id += 28; break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久日本蜜臀| 日产欧产美韩系列久久99| 欧美日韩国产成人在线91| 国产精品影视在线观看| 午夜不卡av免费| 中文字幕亚洲区| 国产亚洲女人久久久久毛片| 欧美老女人在线| 一本大道久久a久久精品综合| 国产一区二区在线视频| 青青青伊人色综合久久| 亚洲国产sm捆绑调教视频 | 777亚洲妇女| 99精品国产99久久久久久白柏| 久久99精品久久久久久动态图| 亚洲一区国产视频| 国产精品成人免费| 国产精品三级视频| 国产蜜臀97一区二区三区| 日韩精品一区国产麻豆| 欧美日本一区二区在线观看| 91精品91久久久中77777| 成人av网站免费| 懂色av一区二区夜夜嗨| 另类中文字幕网| 美日韩一区二区三区| 午夜精品一区二区三区免费视频| 一区二区在线观看免费视频播放| 国产精品国产成人国产三级| 中文乱码免费一区二区| 久久九九全国免费| 久久综合九色欧美综合狠狠| 日韩精品综合一本久道在线视频| 欧美一区二区在线免费播放| 欧美一级日韩一级| 日韩欧美国产综合在线一区二区三区| 91精品国产综合久久婷婷香蕉| 91麻豆精品国产91久久久| 欧美一区二区精品在线| 日韩精品一区二区三区蜜臀 | 国产精品123区| 国产成人精品aa毛片| 国产一区二区三区在线观看精品 | 成人av资源站| 99在线精品观看| 91捆绑美女网站| 在线免费观看不卡av| 欧美日韩和欧美的一区二区| 91精品国产综合久久精品性色| 717成人午夜免费福利电影| 日韩无一区二区| 精品国产第一区二区三区观看体验| 久久一区二区三区国产精品| 国产精品素人视频| 一区二区三区日韩在线观看| 日本成人在线一区| 国产精品一级在线| 91天堂素人约啪| 911精品国产一区二区在线| 日韩欧美激情在线| 欧美激情综合五月色丁香小说| 最新热久久免费视频| 亚洲午夜久久久久久久久电影网| 日本午夜精品一区二区三区电影 | 日韩电影在线观看网站| 国内成+人亚洲+欧美+综合在线 | 91在线视频在线| 欧美美女bb生活片| 久久综合九色综合97婷婷女人 | 色妞www精品视频| 91精品国产综合久久香蕉的特点 | 国产精品国产三级国产aⅴ中文| 一区二区三区中文字幕精品精品| 青青草国产精品亚洲专区无| 成人综合婷婷国产精品久久免费| 欧美撒尿777hd撒尿| 精品国产乱码久久久久久图片| 国产精品欧美一区二区三区| 视频一区视频二区在线观看| 成人综合婷婷国产精品久久免费| 欧美系列亚洲系列| 国产情人综合久久777777| 午夜欧美视频在线观看| 国产aⅴ精品一区二区三区色成熟| 欧美在线观看视频在线| 久久综合色综合88| 亚洲一卡二卡三卡四卡无卡久久| 美国精品在线观看| 色噜噜狠狠色综合中国| 亚洲第一久久影院| 国产成人欧美日韩在线电影| 91.xcao| 亚洲人成在线观看一区二区| 久久精工是国产品牌吗| 在线国产电影不卡| 亚洲国产精品精华液ab| 日本不卡在线视频| 色拍拍在线精品视频8848| 国产日韩视频一区二区三区| 视频一区二区三区在线| 91麻豆精东视频| 久久久久高清精品| 久久精品国产一区二区| 欧美日韩一区二区三区不卡| 亚洲欧美一区二区三区极速播放 | 日韩成人dvd| 欧洲生活片亚洲生活在线观看| 久久这里只精品最新地址| 五月天欧美精品| 一本一道久久a久久精品综合蜜臀| 久久久蜜桃精品| 奇米影视一区二区三区小说| 欧美日韩在线三区| 一区二区三区在线视频观看 | 成人美女视频在线看| 欧美videos大乳护士334| 亚洲电影视频在线| 色噜噜偷拍精品综合在线| 国产精品乱码一区二三区小蝌蚪| 激情久久久久久久久久久久久久久久| 欧美日韩高清在线播放| 一区二区高清免费观看影视大全 | 亚洲综合男人的天堂| 99久久精品一区二区| 国产精品国产三级国产aⅴ原创| 国产很黄免费观看久久| 久久精品男人天堂av| 国产福利一区在线观看| 精品美女在线观看| 黄色精品一二区| 久久久精品欧美丰满| 国产91精品在线观看| 日本一二三四高清不卡| 成人av在线看| 亚洲天堂免费看| 欧美丝袜第三区| 性做久久久久久免费观看| 欧美喷潮久久久xxxxx| 日本女优在线视频一区二区| 日韩亚洲欧美综合| 国产在线观看一区二区| 久久久噜噜噜久噜久久综合| 国产高清视频一区| 中文字幕一区二区三区乱码在线| 91视视频在线直接观看在线看网页在线看| 国产精品人人做人人爽人人添| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 成人97人人超碰人人99| 亚洲欧美日韩一区二区 | 欧美日韩一区二区欧美激情| 日韩影院精彩在线| 亚洲激情男女视频| 在线免费观看日韩欧美| 日韩电影免费在线观看网站| 精品久久久久香蕉网| 国产成人亚洲精品青草天美| 国产精品国产三级国产普通话99 | 久久久久久久久久久99999| 国产91对白在线观看九色| 日韩美女啊v在线免费观看| 欧洲一区在线观看| 美女高潮久久久| 国产精品传媒视频| 欧美肥胖老妇做爰| 国产精品18久久久久久久久 | 欧美性猛交xxxx黑人交| 美女在线视频一区| 国产精品三级视频| 欧美二区乱c少妇| 国产精品一区免费视频| 亚洲一区中文日韩| 欧美精品一区二区三区久久久| 97久久精品人人爽人人爽蜜臀| 日韩制服丝袜先锋影音| 中文久久乱码一区二区| 欧美日韩一区二区欧美激情| 国产精品99久久久| 亚洲成精国产精品女| 国产精品视频九色porn| 欧美久久高跟鞋激| av高清不卡在线| 日韩高清一区在线| 国产精品不卡在线观看| 日韩欧美综合一区| 91久久精品国产91性色tv| 国产一区二区在线视频| 亚洲成人午夜影院| 国产精品视频一区二区三区不卡 | 亚洲日本电影在线| 91精品一区二区三区久久久久久| 成人激情黄色小说| 极品少妇一区二区三区精品视频| 亚洲特黄一级片| 精品99一区二区| 3d成人动漫网站| 91久久一区二区| 国产suv精品一区二区6| 秋霞电影一区二区| 五月激情综合网| 一区二区三区欧美在线观看|