阅读:1075回复:2
在vtoolsd+vc6环境中不能用ing 13实现对硬盘扇区的操作?我的程序出了问题
大家好。我想在这里问一个问题。我是刚学vxd开发的。有些问题不太明白。我想搞一个加密方案,要求要对硬盘的扇区进行读写。但好象用int 13时不行。下面是我的vxd的对关机的操作代码(演示性质的),大家看看为什么在vxd中用int 13会出问题。我已经把他编译生成了Testchdi.vxd,并正确静态加载了,但加载后关不了机。
我的试验环境是:Win98,vc==6.0,vtoolsd3.0,softice. 在vxd开发中如何实现对任意指定的物理扇区的读写操作? VOID TestchdiDevice::OnSystemExit(VMHANDLE hSysVM) { char buf[513]; int pi=0; _asm { MOV AX,0201H MOV CX,0001H MOV DX,0180H LEA BX,buf INT 13H } pi+=71; for(int i=0;i<=10;i++) { buf[pi]=\'b\'; pi++; } _asm { MOV AX,0301H MOV CX,0001H MOV DX,0180H LEA BX,buf INT 13H } } |
|
沙发#
发布于:2002-08-13 11:21
有人能帮我解决着问题吗?我真的很急呀!
|
|
板凳#
发布于:2002-08-14 12:58
VXD中不能直接调用中断服务程序,必须将调用代码嵌在如下的结构中:
Begin_Nest_Exec(); Save_Client_State(PCLIENT_STRUCT pSavedRegs); .......你的中断调用代码 Restore_Client_State(PCLIENT_STRUCT pSavedRegs); End_Nest_Exec(); 而且一般是用VOID Exec_Int(DWORD Intnum)来执行中断调用,同时要注意,不是所有的中断都能执行,具体看看DDK中的说明,而且附带了例子,同时VWIN32也提供了一些DOS调用功能,但很有限,下面是一小段演示代码 #define VWIN32_DIOC_DOS_IOCTL 1 typedef struct _DIOC_REGISTERS { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; DWORD reg_EDI; DWORD reg_ESI; DWORD reg_Flags; } DIOC_REGISTERS, *PDIOC_REGISTERS; // Important: All MS_DOS data structures must be packed on a // one-byte boundary. #pragma pack(1) typedef struct _MID { WORD midInfoLevel; DWORD midSerialNum; BYTE midVolLabel[11]; BYTE midFileSysType[8]; } MID, *PMID; #pragma pack() HANDLE hDevice; DIOC_REGISTERS reg; MID mid; BOOL fResult; DWORD cb; int nDrive = 3; // Drive C: hDevice = CreateFile(\"\\\\\\\\.\\\\vwin32\", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL); reg.reg_EAX = 0x440D; // IOCTL for block devices reg.reg_EBX = nDrive; // zero-based drive identifier reg.reg_ECX = 0x4866; // Get Media ID command reg.reg_EDX = (DWORD) ∣ // receives media identifier information reg.reg_Flags = 0x0001; // assume error (carry flag is set) fResult = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_IOCTL, ®, sizeof(reg), ®, sizeof(reg), &cb, 0); if (!fResult || (reg.reg_Flags & 0x0001)) ; // error if carry flag is set 这段代码执行的是INT 21 440D功能,取介质标识符 |
|