首页  编辑  

如何在Delphi中使用98DDK编程?

Tags: /超级猛料/Core.驱动,VxD,服务/   Date Created:

例如,我安装了Win 98 DDK,在DDK文档中有一个IFSMgr_InstallFileSystemApiHook函数,那么如何在Delphi中进行调用?

我的DDK是2K的,不知道有没有这个函数。现在事情比较多,大致说一下吧。

根据.h或者.inc文件找到函数对应的Lib文件。如果,确定不了,就在所有的Lib文件里面搜索吧^_^

找到后,用二进制编辑器打开文件。开头应该是:!<arch>

在文件中部会发现如下定义:

__imp__ZwEnumerateValueKey@24。__IMPORT_DESCRIPTOR_NTOSKRNL..NTOSKRNL.EXE

就是说EnumerateValueKey在NTOSKRNL.exe中,id是24,真实名字是:__imp__ZwEnumerateValueKey。

我明白了。这个函数并不是独立的函数。而是类似于以前中断调用的一个功能,要通过VxDCall调用来实现(DDK在VMM.inc中定义)。

VxDCall(IFSMgr_InstallFileSystemApiHook);

所以应该这样:

int IFSMgrInstallFileSystemApiHook(pIFSFileHookFunc HookFunc)

{

   int iResult;

   _asm mov eax [HookFunc]

   VxDCall(IFSMgr_InstallFileSystemApiHook);

   _asm mov [iResult], eax

   return(iResult);

}

GoodHope(好望角)

我只是大意示范一下,C++里面的内嵌汇编已经忘记该怎么写了。

*************

气死我了!!!!

我说怎么老编译不过去,原来是把警告当成错误了!看着编译输出窗口一阵乱滚,心也乱了,竟然没有注意到是只是警告。真真气死我了!!!!

代码见下,可实现你的调用要求。IFSMgr_InstallFileSystemApiHook函数体内部汇编未经调试,纯属虚构。

编译警告可以通过在每个IFSMgr_Service定义体内增加一个参数(第二个)LOCAL来消除,不过拿不准是否应该添加。

#include <VMM.h>

#ifndef IFSMGR_DEVICE_ID

#define IFSMGR_DEVICE_ID    0x00040        /* Installable File System Manager */

#define IFSMGR_INIT_ORDER   0x10000 + V86MMGR_Init_Order

#define FSD_INIT_ORDER      0x00100 + IFSMgr_Init_Order

#else

/* ASM

ifdef MASM

       .errnz IFSMgr_Device_ID - 0040h

endif

*/

#endif

#define IFSMgr_Service Declare_Service

#define IFSMgr_StdCall_Service Declare_SCService

#define IFSMgr_FastCall_Service Declare_SCService

Begin_Service_Table(IFSMGR, IFSMGR)

IFSMgr_Service  (IFSMgr_Get_Version)

IFSMgr_Service  (IFSMgr_RegisterMount)

IFSMgr_Service  (IFSMgr_RegisterNet)

IFSMgr_Service  (IFSMgr_RegisterMailSlot)

IFSMgr_Service  (IFSMgr_Attach)

IFSMgr_Service  (IFSMgr_Detach)

IFSMgr_Service  (IFSMgr_Get_NetTime)

IFSMgr_Service  (IFSMgr_Get_DOSTime)

IFSMgr_Service  (IFSMgr_SetupConnection)

IFSMgr_Service  (IFSMgr_DerefConnection)

IFSMgr_Service  (IFSMgr_ServerDOSCall)

IFSMgr_Service  (IFSMgr_CompleteAsync)

IFSMgr_Service  (IFSMgr_RegisterHeap)

IFSMgr_Service  (IFSMgr_GetHeap)

IFSMgr_Service  (IFSMgr_RetHeap)

IFSMgr_Service  (IFSMgr_CheckHeap)

IFSMgr_Service  (IFSMgr_CheckHeapItem)

IFSMgr_Service  (IFSMgr_FillHeapSpare)

IFSMgr_Service  (IFSMgr_Block)

IFSMgr_Service  (IFSMgr_Wakeup)

IFSMgr_Service  (IFSMgr_Yield)

IFSMgr_Service  (IFSMgr_SchedEvent)

IFSMgr_Service  (IFSMgr_QueueEvent)

IFSMgr_Service  (IFSMgr_KillEvent)

IFSMgr_Service  (IFSMgr_FreeIOReq)

IFSMgr_Service  (IFSMgr_MakeMailSlot)

IFSMgr_Service  (IFSMgr_DeleteMailSlot)

IFSMgr_Service  (IFSMgr_WriteMailSlot)

IFSMgr_Service  (IFSMgr_PopUp)

IFSMgr_Service  (IFSMgr_printf)

IFSMgr_Service  (IFSMgr_AssertFailed)

IFSMgr_Service  (IFSMgr_LogEntry)

IFSMgr_Service  (IFSMgr_DebugMenu)

IFSMgr_Service  (IFSMgr_DebugVars)

IFSMgr_Service  (IFSMgr_GetDebugString)

IFSMgr_Service  (IFSMgr_GetDebugHexNum)

IFSMgr_Service  (IFSMgr_NetFunction)

IFSMgr_Service  (IFSMgr_DoDelAllUses)

IFSMgr_Service  (IFSMgr_SetErrString)

IFSMgr_Service  (IFSMgr_GetErrString)

IFSMgr_Service  (IFSMgr_SetReqHook)

IFSMgr_Service  (IFSMgr_SetPathHook)

IFSMgr_Service  (IFSMgr_UseAdd)

IFSMgr_Service  (IFSMgr_UseDel)

IFSMgr_Service  (IFSMgr_InitUseAdd)

IFSMgr_Service  (IFSMgr_ChangeDir)

IFSMgr_Service  (IFSMgr_DelAllUses)

IFSMgr_Service  (IFSMgr_CDROM_Attach)

IFSMgr_Service  (IFSMgr_CDROM_Detach)

IFSMgr_Service  (IFSMgr_Win32DupHandle)

IFSMgr_Service  (IFSMgr_Ring0_FileIO)

IFSMgr_Service  (IFSMgr_Win32_Get_Ring0_Handle)

IFSMgr_Service  (IFSMgr_Get_Drive_Info)

IFSMgr_Service  (IFSMgr_Ring0GetDriveInfo)

IFSMgr_Service  (IFSMgr_BlockNoEvents)

IFSMgr_Service  (IFSMgr_NetToDosTime)

IFSMgr_Service  (IFSMgr_DosToNetTime)

IFSMgr_Service  (IFSMgr_DosToWin32Time)

IFSMgr_Service  (IFSMgr_Win32ToDosTime)

IFSMgr_Service  (IFSMgr_NetToWin32Time)

IFSMgr_Service  (IFSMgr_Win32ToNetTime)

IFSMgr_Service  (IFSMgr_MetaMatch)

IFSMgr_Service  (IFSMgr_TransMatch)

IFSMgr_Service  (IFSMgr_CallProvider)

IFSMgr_Service  (UniToBCS)

IFSMgr_Service  (UniToBCSPath)

IFSMgr_Service  (BCSToUni)

IFSMgr_Service  (UniToUpper)

IFSMgr_Service  (UniCharToOEM)

IFSMgr_Service  (CreateBasis)

IFSMgr_Service  (MatchBasisName)

IFSMgr_Service  (AppendBasisTail)

IFSMgr_Service  (FcbToShort)

IFSMgr_Service  (ShortToFcb)

IFSMgr_Service  (IFSMgr_ParsePath)

IFSMgr_Service  (Query_PhysLock)

IFSMgr_Service  (_VolFlush)

IFSMgr_Service  (NotifyVolumeArrival)

IFSMgr_Service  (NotifyVolumeRemoval)

IFSMgr_Service  (QueryVolumeRemoval)

IFSMgr_Service  (IFSMgr_FSDUnmountCFSD)

IFSMgr_Service  (IFSMgr_GetConversionTablePtrs)

IFSMgr_Service  (IFSMgr_CheckAccessConflict)

IFSMgr_Service  (IFSMgr_LockFile)

IFSMgr_Service  (IFSMgr_UnlockFile)

IFSMgr_Service  (IFSMgr_RemoveLocks)

IFSMgr_Service  (IFSMgr_CheckLocks)

IFSMgr_Service  (IFSMgr_CountLocks)

IFSMgr_Service  (IFSMgr_ReassignLockFileInst)

IFSMgr_Service  (IFSMgr_UnassignLockList)

IFSMgr_Service  (IFSMgr_MountChildVolume)

IFSMgr_Service  (IFSMgr_UnmountChildVolume)

IFSMgr_Service  (IFSMgr_SwapDrives)

IFSMgr_Service  (IFSMgr_FSDMapFHtoIOREQ)

IFSMgr_Service  (IFSMgr_FSDParsePath)

IFSMgr_Service  (IFSMgr_FSDAttachSFT)

IFSMgr_Service  (IFSMgr_GetTimeZoneBias)

IFSMgr_Service  (IFSMgr_PNPEvent)

IFSMgr_Service  (IFSMgr_RegisterCFSD)

IFSMgr_Service  (IFSMgr_Win32MapExtendedHandleToSFT)

IFSMgr_Service  (IFSMgr_DbgSetFileHandleLimit)

IFSMgr_Service  (IFSMgr_Win32MapSFTToExtendedHandle)

IFSMgr_Service  (IFSMgr_FSDGetCurrentDrive)

IFSMgr_Service  (IFSMgr_InstallFileSystemApiHook)

IFSMgr_Service  (IFSMgr_RemoveFileSystemApiHook)

IFSMgr_Service  (IFSMgr_RunScheduledEvents)

IFSMgr_Service        (IFSMgr_CheckDelResource)

IFSMgr_Service        (IFSMgr_Win32GetVMCurdir)

IFSMgr_Service        (IFSMgr_SetupFailedConnection)

IFSMgr_Service        (_GetMappedErr)

IFSMgr_Service        (ShortToLossyFcb)

IFSMgr_Service        (IFSMgr_GetLockState)

IFSMgr_Service        (BcsToBcs)

IFSMgr_Service        (IFSMgr_SetLoopback)

IFSMgr_Service        (IFSMgr_ClearLoopback)

IFSMgr_Service        (IFSMgr_ParseOneElement)

IFSMgr_Service        (BcsToBcsUpper)

IFSMgr_Service        (IFSMgr_DeregisterFSD)

IFSMgr_Service        (IFSMgr_RegisterFSDWithPriority)

IFSMgr_Service        (IFSMgr_Get_DOSTimeRounded)

IFSMgr_Service        (_LongToFcbOem)

IFSMgr_Service        (IFSMgr_GetRing0FileHandle)

IFSMgr_Service        (IFSMgr_UpdateTimezoneInfo)

IFSMgr_Service  (IFSMgr_Ring0IsCPSingleByte)

End_Service_Table(IFSMGR, IFSMGR)

// 这个函数是根据MSDN给出的IFSMgr_InstallFileSystemApiHook的入口和出口参数写的

// 除了那两句_asm语句,别的都应该没有什么问题。

int VXDINLINE

IFSMgr_InstallFileSystemApiHook(int HookFunc)

{

   int iResult;

   _asm mov eax, [HookFunc]  //  也许应该是_asm mov edx, [HookFunc]

   VxDCall (IFSMgr_InstallFileSystemApiHook)

   _asm mov [iResult], eax

   return(iResult);

}