📄 sthvxd.c
字号:
/////////////////////////////////////////////////////////////////////////////
//
// VXD工作代码(由汇编调用)
//
// 梁肇新
//
// 北京豪杰计算机技术有限公司
//
/////////////////////////////////////////////////////////////////////////////
#define WANTVXDWRAPS
#include <windows.h>
#include <basedef.h>
#include <vmm.h>
#include <debug.h>
#include <vxdwraps.h>
#include <vwin32.h>
#include <winerror.h>
#define CVXD_VERSION 0x400
#define CVXD_V86_FUNCTION1 1
#define CVXD_V86_FUNCTION2 2
#define CVXD_PM_FUNCTION1 1
#define CVXD_PM_FUNCTION2 2
typedef DIOCPARAMETERS *LPDIOC;
#pragma VxD_LOCKED_CODE_SEG
#pragma VxD_LOCKED_DATA_SEG
//DeviceIoControl函数
DWORD _stdcall CVXD_W32_DeviceIOControl(CRS *, DWORD, DWORD, DWORD, LPDIOC);
//清除
DWORD _stdcall CVXD_CleanUp(void);
//DeviceIoControl功能函数
DWORD _stdcall CVXD_W32_EnableHalt(CRS *, DWORD, DWORD, LPDIOC);
//DeviceIoControl功能号表
DWORD (_stdcall *CVxD_W32_Proc[])(CRS *,DWORD,DWORD,LPDIOC)=
{
0, //1(未使用)
0, //2(未使用)
CVXD_W32_EnableHalt //3(开关降温功能)
};
#define MAX_CVXD_W32_API (sizeof(CVxD_W32_Proc)/sizeof(DWORD))
//开关降温
DWORD EnableHlt=0;
/////////////////////////////////////////////////////////////////////////////
// CVXD_W32_DeviceIOControl
//
// 应用程序->DeviceIoControl->内核->由汇编调用->这里
//
/////////////////////////////////////////////////////////////////////////////
DWORD _stdcall CVXD_W32_DeviceIOControl(CRS * lpClient,
DWORD dwService,
DWORD dwDDB,
DWORD hDevice,
LPDIOC lpDIOCParms)
{
DWORD dwRetVal = 0;
// DIOC_OPEN is sent when VxD is loaded w/ CreateFile
// (this happens just after SYS_DYNAMIC_INIT)
if( dwService == DIOC_OPEN )
{
// Out_Debug_String("SthVXD: WIN32 DEVIOCTL supported here!\n\r");
// Must return 0 to tell WIN32 that this VxD supports DEVIOCTL
dwRetVal = 0;
}
// DIOC_CLOSEHANDLE is sent when VxD is unloaded w/ CloseHandle
// (this happens just before SYS_DYNAMIC_EXIT)
else if( dwService == DIOC_CLOSEHANDLE )
{
// Dispatch to cleanup proc
dwRetVal = CVXD_CleanUp();
}
else if( dwService > MAX_CVXD_W32_API )
{
// Returning a positive value will cause the WIN32 DeviceIOControl
// call to return FALSE, the error code can then be retrieved
// via the WIN32 GetLastError
dwRetVal = ERROR_NOT_SUPPORTED;
}
else {
//调用功能函数功能号从1开始
dwRetVal=(CVxD_W32_Proc[dwService-1])(lpClient,dwDDB,hDevice,lpDIOCParms);
}
return(dwRetVal);
}
/////////////////////////////////////////////////////////////////////////////
//
// 开关降温功能(功能号3)
//
/////////////////////////////////////////////////////////////////////////////
DWORD _stdcall CVXD_W32_EnableHalt(CRS * lpClient,DWORD dwDDB, DWORD hDevice, LPDIOC lpDIOCParms)
{
LPDWORD lpEnablePtr;
DWORD OldEnable;
OldEnable =EnableHlt;
lpEnablePtr =(LPDWORD)lpDIOCParms->lpvOutBuffer;
if(lpEnablePtr) EnableHlt=*lpEnablePtr;
return(OldEnable);
}
//汇编定义的函数
void IDLEHandleProc(void);
int InstallIDLEProc(void);
int UnInstallIDLEProc(void);
/////////////////////////////////////////////////////////////////////////////
//
//
//
/////////////////////////////////////////////////////////////////////////////
DWORD _stdcall CVXD_Dynamic_Exit(void)
{
// Out_Debug_String("SthVXD: Dynamic Exit\n\r");
//卸除内核空闲函数
UnInstallIDLEProc();
return(VXD_SUCCESS);
}
/////////////////////////////////////////////////////////////////////////////
//
//
//
/////////////////////////////////////////////////////////////////////////////
DWORD _stdcall CVXD_CleanUp(void)
{
// Out_Debug_String("SthVXD: Cleaning Up\n\r");
return(VXD_SUCCESS);
}
/////////////////////////////////////////////////////////////////////////////
//
// CVXD_V86API
//
// 入口: function功能号
// parm1
// parm2
//
// 出口: 无
/////////////////////////////////////////////////////////////////////////////
int _stdcall CVXD_V86API(unsigned int function,
unsigned int parm1,
unsigned int parm2)
{
int retcode;
// Out_Debug_String("******* CVXD: V86 API Call\n\r");
switch (function)
{
case CVXD_V86_FUNCTION1:
retcode = V86Func1(parm1);
break;
case CVXD_V86_FUNCTION2:
retcode = V86Func2(parm1, parm2);
break;
default:
retcode = FALSE;
break;
}
return (retcode);
}
/////////////////////////////////////////////////////////////////////////////
// CVXD_PMAPI
//
// 入口: function功能号
// parm1
// parm2
//
// 出口: 无
/////////////////////////////////////////////////////////////////////////////
int _stdcall CVXD_PMAPI(unsigned int function,
unsigned int parm1,
unsigned int parm2)
{
int retcode;
switch (function)
{
case CVXD_PM_FUNCTION1:
retcode = PMFunc1(parm1);
break;
case CVXD_PM_FUNCTION2:
retcode = PMFunc2(parm1, parm2);
break;
default:
retcode = 0;
break;
}
return (retcode);
}
/////////////////////////////////////////////////////////////////////////////
// V86Func1
//
// 入口: parm1
//
// 出口: 1
/////////////////////////////////////////////////////////////////////////////
int V86Func1(unsigned int parm1)
{
// Out_Debug_String("******* CVXD: V86 API 2 Call\n\r");
return (1);
}
/////////////////////////////////////////////////////////////////////////////
// V86Func2
//
// 入口: parm1
// parm2
//
// 出口: 2
/////////////////////////////////////////////////////////////////////////////
int V86Func2(unsigned int parm1,
unsigned int parm2)
{
// Out_Debug_String("******* CVXD: V86 API 2 Call\n\r");
return (2);
}
/////////////////////////////////////////////////////////////////////////////
// PMFunc1
//
// 入口: parm1
//
// 出口: 1
///////////////////////////////////////////////////////////////////////////
int PMFunc1(unsigned int parm1)
{
// Out_Debug_String("******* CVXD: PM API 1 Call\n\r");
return (1);
}
/////////////////////////////////////////////////////////////////////////////
// PMFunc2
//
// 入口: parm1
// parm2
//
// 出口: 2
/////////////////////////////////////////////////////////////////////////////
int PMFunc2(unsigned int parm1,
unsigned int parm2)
{
// Out_Debug_String("******* CVXD: PM API 2 Call\n\r");
return (2);
}
#pragma VxD_ICODE_SEG
#pragma VxD_IDATA_SEG
/////////////////////////////////////////////////////////////////////////////
//
// 初始化时
//
/////////////////////////////////////////////////////////////////////////////
DWORD _stdcall CVXD_Dynamic_Init(void)
{
// Out_Debug_String("SthVXD: Dynamic Init\n\r");
//安装内核空闲函数
InstallIDLEProc();
return(VXD_SUCCESS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -