⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disk.cpp

📁 吐血了
💻 CPP
字号:
#include <afxwin.h>
#include "disk.h"

#define VWIN32_DIOC_DOS_IOCTL		1
#define VWIN32_DIOC_DOS_INT25		2
#define VWIN32_DIOC_DOS_DRIVEINFO	6

#define FSINFOSIG 0x61417272L

disk::disk( )
{
	hdev = CreateFile ( "\\\\.\\VWIN32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL ) ;
}

void disk::getmediaid ( int drive_1, media *m )
{
	DIOC_REGISTERS r = {0};
	DWORD cb ;
	
	r.eax = 0x440d ;    
	r.ebx = drive_1 ;
	r.ecx = 0x0866 ;
	r.edx = ( DWORD ) m ;
	r.flags = 1 ;

	DeviceIoControl ( hdev, VWIN32_DIOC_DOS_IOCTL,
						&r, sizeof ( r ), &r, sizeof ( r ), &cb, 0 ) ;
}

void disk::readabsolutesectors (  int drive_0, int startsect,
		 						  int numsect, void * buffer )
{
	DIOC_REGISTERS r ;
	DISKIO di ;
	DWORD cb;

	r.eax = drive_0 ;    
	r.ebx = ( DWORD ) &di ;
	r.ecx = 0xffff ;
	r.flags = 1 ;
	di.startsector = startsect ;
	di.sectorsnum = numsect ;
	di.buff = ( DWORD ) buffer ;
	
	DeviceIoControl ( hdev, VWIN32_DIOC_DOS_INT25,
						&r, sizeof ( r ), &r, sizeof ( r ), &cb, 0 ) ;
}

void disk::readabsolutesectors32 ( int drive_1, int startsect,
								   int numsect, void *buffer )
{
	DIOC_REGISTERS r ;
	DISKIO di ;
	DWORD cb ;

	r.eax = 0x7305 ;  
	r.ebx = ( DWORD ) &di ;
	r.ecx = 0xffff ;  
	r.edx = drive_1 ;  
	r.esi = 0 ;       
	r.flags = 0 ;       
	di.startsector = startsect ;
	di.sectorsnum = numsect ;
	di.buff = ( DWORD ) buffer ;

	DeviceIoControl( hdev, VWIN32_DIOC_DOS_DRIVEINFO,
					  &r, sizeof( r ), &r, sizeof( r ), &cb, 0 ); 
}

CString disk::getfat_12 ( BYTE *pfat, int k ) 
{
	WORD value ;
	CString str ;
	WORD *fatentry ;

	int i = k * 3 / 2 ;

	fatentry =  ( WORD* ) ( pfat + i ) ;
	
	if ( ( k % 2 ) == 0 )
		value = ( *fatentry & 0x0fff ) ;
	else
		value = ( *fatentry >> 4 ) ;

	str.Format ( "%03x", value ) ;

	return str ;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -