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

📄 generic.c

📁 自动生成虚拟设备驱动(VXD)的C++代码的一个库
💻 C
字号:
/////////////////////////////////
// Main source file for GENERIC.VxD
// FileName: GENERIC.c - created by VxDWriter
// Copyright (c) 1997 by Somnath Kundu.  All Rights Reserved.

#include <vxdlib.h>
#pragma hdrstop
#include "GENERIC.h"
#include <vxdmain.h>		// To be included in this file only

#ifdef __cplusplus
extern "C" {
#endif

static CONTROL_PROC Initialize, Terminate, W32_DeviceIoControl;

BEGIN_SERVICE_TABLE_MAP()		// Macro to create VxD service table
    GetVersion,
END_SERVICE_TABLE_MAP()

BEGIN_CONTROL_DISPATCH_MAP (GENERIC)

    DEVICE_INIT,              Initialize,
    SYS_DYNAMIC_DEVICE_INIT,  Initialize,
    SYSTEM_EXIT2,             Terminate,
    SYS_DYNAMIC_DEVICE_EXIT,  Terminate,
    W32_DEVICEIOCONTROL,      W32_DeviceIoControl

END_CONTROL_DISPATCH_MAP()

#ifdef __cplusplus
}
#endif

//================ Put your locked code/data here ===========================
#pragma VxD_LOCKED_DATA_SEG
#pragma VxD_LOCKED_CODE_SEG

typedef DIOCPARAMETERS *PDIOC;

DWORD __stdcall W32_GetVersion (PDIOC);

DWORD ( __stdcall *GENERIC_W32_Proc[] )(PDIOC) = {
	W32_GetVersion,
	// Put other W32 APIs here as per requirment
};

#define MAX_GENERIC_W32_API ASIZE( GENERIC_W32_Proc)


NAKED void CallBack (void)
{
    CLIENT_STRUCT *pRegs;
    char msg[120];
    ENTER;

    pRegs = (CLIENT_STRUCT*)_EBP;
    sprintf( msg, "VMHandle: %X    RefData: %X   ClientReg: %X",_EBX,_EDX,_EBP);
    MessageBox( 0, msg, "Hello from CallBack", MB_OK);

    RETURN;
}

//================ Put your pageable code/data here =========================
#pragma VxD_PAGEABLE_CODE_SEG
#pragma VxD_PAGEABLE_DATA_SEG

//---------------------------------------------------------------------------
int __stdcall W32_DeviceIoControl (DECLARE_PREGS)
{
    DWORD dwRetVal = 0;

    if (_ECX == DIOC_OPEN )
       dwRetVal = 0;
    else if (_ECX == DIOC_CLOSEHANDLE )
       dwRetVal = VXD_SUCCESS;
    else if (_ECX > MAX_GENERIC_W32_API )
       dwRetVal = ERROR_NOT_SUPPORTED;
    else
       dwRetVal = (*GENERIC_W32_Proc[_ECX-1])((PDIOC)_ESI);

    return dwRetVal;
}

//---------------------------------------------------------------------------
DWORD __stdcall W32_GetVersion (PDIOC pDIOParam)
{
    DECLARE_REGS;

    *(WORD*)pDIOParam->lpvOutBuffer = (GENERIC_MAJOR_VER << 8) | GENERIC_MINOR_VER;
    ESI = (DWORD)&CallBack;
    EDX = 0;
    RVXDCALL( Schedule_Global_Event);

    return NO_ERROR;
}

//---------------------------------------------------------------------------
int __stdcall Terminate (DECLARE_PREGS)
{
    // TODO: Add code here to handle SYS_DYNAMIC_DEVICE_EXIT control message

    return VXD_SUCCESS;
}
//---------------------------------------------------------------------------
int __stdcall V86_API (CLIENT_STRUCT *pClientReg)
{
    // TODO: Add your own code here to support V86 mode APIs

    return 0;
}
//---------------------------------------------------------------------------
int __stdcall PM_API (CLIENT_STRUCT *pClientReg)
{
    // TODO: Add your own code here to support 16-bit PM APIs

    return 0;
}
//---------------------------------------------------------------------------
DWORD _cdecl GetVersion ()
{
    // TODO: Add code for VxD service 0

    return 0;
}
//============ Put your initialization code/data here =======================
#pragma VxD_IDATA_SEG
#pragma VxD_ICODE_SEG

int __stdcall Initialize (DECLARE_PREGS)
{
    // TODO: Add code here to handle device initialization

    return VXD_SUCCESS;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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