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

📄 winio.hpp

📁 bcb s I/O library in WinXP
💻 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 + -