?? winio.hpp
字號:
#define IOACCESS_READ_BYTE 1
#define IOACCESS_READ_WORD 2
#define IOACCESS_READ_DWORD 3
#define IOACCESS_WRITE_BYTE 4
#define IOACCESS_WRITE_WORD 5
#define IOACCESS_WRITE_DWORD 6
#define ECACCESS_WRITE_COMMAND_PORT 0x10
#define ECACCESS_WRITE_DATA_PORT 0x11
#define ECACCESS_READ_DATA_PORT 0x12
#define ECACCESS_WRITE_COMMAND_DATA 0x13
#define ECACCESS_READ_COMMAND_DATA 0x14
#define ECACCESS_READ_INDEX 0x15
#define ECACCESS_WRITE_INDEX 0x16
#define ECACCESS_READ_Q_EVENT 0x17
#define KBCACCESS_WRITE_COMMAND_PORT 0x20
#define KBCACCESS_READ_COMMAND_PORT 0x21
#define KBCACCESS_WRITE_DATA_PORT 0x22
#define KBCACCESS_READ_DATA_PORT 0x23
#define KBCACCESS_WRITE_COMMAND_DATA 0x24
#define KBCACCESS_READ_COMMAND_DATA 0x25
#define KBCACCESS_READ_INDEX 0x26
#define KBCACCESS_WRITE_INDEX 0x27
#define KBCACCESS_DISABLE 0x28
#define KBCACCESS_ENABLE 0x29
#define CLI_INT 0x64
#define STI_INT 0x65
#define WDM_VERSION 0xFF
#define WIN_NT_DYNAMIC_LOAD_SERVER 1
#ifndef DRIVER
#define DRIVER "WINIO"
#endif
#ifndef DEVIO_H
#define DEVIO_H
//===============================================
#ifndef CTL_CODE
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
#define FILE_ANY_ACCESS 0
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
#define FILE_DEVICE_UNKNOWN 0x00000022
#endif
//===============================================
class TDeviceIO
{
public:
unsigned char type;
union {
struct{
unsigned char m_al;
unsigned char m_ah;
unsigned char m_hal;
unsigned char m_hah;
unsigned char m_dl;
unsigned char m_dh;
};
struct{
unsigned short int m_ax;
unsigned short int m_hax;
unsigned short int m_dx;
};
struct{
ULONG m_eax;
};
};
#if 0
unsigned char m_al;
unsigned short int m_ax;
unsigned short int m_dx;
ULONG m_eax;
#endif
//LONG m_eax, m_ebx, m_ecx, m_edx;
//LONG m_esi, m_edi, m_ebp;
//LONG m_cflag;
};
//===============================================
#define WINIO_Access CTL_CODE( \
FILE_DEVICE_UNKNOWN, \
0x888, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define DEVIO_Test CTL_CODE( \
FILE_DEVICE_UNKNOWN, \
0x889, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#endif
HANDLE DriverHandle;
TDeviceIO r;
DWORD retbyte;
#define WinIO(); DeviceIoControl(DriverHandle, WINIO_Access, &r, sizeof(r), &r, sizeof(r), &retbyte, 0);
#if WIN_NT_DYNAMIC_LOAD_SERVER
bool BuildDriverService()
{
// SERVICE_STATUS srvStatus;
SC_HANDLE scHandle, srvHandle;
// open service control manager
scHandle=OpenSCManager(0,0,SC_MANAGER_ALL_ACCESS);
if (!scHandle)
{
return false;
}
// open service
srvHandle=OpenService(scHandle,DRIVER,SERVICE_ALL_ACCESS);
if (srvHandle==0)
{
char path[MAX_PATH]={0};
String DriverPath=ExtractFilePath(Application->ExeName)+DRIVER+".sys";
strcat(path, DriverPath.c_str());
// GetWindowsDirectory(path,sizeof(path)-1);
// strcat(path,"\\system32\\drivers\\" DRIVER ".sys");
srvHandle=CreateService(
scHandle,
DRIVER,
DRIVER,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
path,
0,0,0,0,0);
}
if (srvHandle==0)
return false;
StartService(srvHandle,0,0);
CloseServiceHandle(srvHandle);
CloseServiceHandle(scHandle);
return true;
}
//===============================================
// for Win2k dynamic load driver
//===============================================
bool DeleteDriverService()
{
SERVICE_STATUS srvStatus;
SC_HANDLE scHandle,srvHandle;
scHandle=OpenSCManager(0,0,SC_MANAGER_ALL_ACCESS);
if (!scHandle)
{
return false;
}
srvHandle=OpenService(scHandle,DRIVER,SERVICE_ALL_ACCESS);
if (srvHandle)
{
// stop service
ControlService(srvHandle,SERVICE_CONTROL_STOP,&srvStatus);
DeleteService(srvHandle);
}
CloseServiceHandle(srvHandle);
CloseServiceHandle(scHandle);
return true;
}
#endif
//===============================================
bool OpenDriver()
{
#if WIN_NT_DYNAMIC_LOAD_SERVER
if (!BuildDriverService())
return false;
#endif
DriverHandle=CreateFile(
"\\\\.\\" DRIVER,
GENERIC_READ|GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
if (DriverHandle==INVALID_HANDLE_VALUE)
{
return false;
}
return true;
}
bool CloseDriver()
{
CloseHandle(DriverHandle);
#if WIN_NT_DYNAMIC_LOAD_SERVER
if (!DeleteDriverService())
return false;
#endif
return true;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -