📄 system.c
字号:
#include <windows.h>
#include <windev.h>
#include <types.h>
#include <winnt.h>
#include <nkintr.h>
#include <oalintr.h>
#include <clocks.h>
#include <hwdefs.h>
#include <haluser.h>
#define MAX_BUFFER 1024
static BOOL g_bDeviceOpened=FALSE;
static BOOL g_bRuning=TRUE;
static HANDLE g_hEvent;
static BYTE gBuffer[MAX_BUFFER];
BOOL WINAPI
DllMain(HINSTANCE DllInstance, DWORD Reason, LPVOID Reserved)
{
switch(Reason) {
case DLL_PROCESS_ATTACH:
DEBUGMSG(ZONE_INIT, (TEXT("CIR: DLL_PROCESS_ATTACH\r\n")));
DisableThreadLibraryCalls((HMODULE) DllInstance);
return TRUE;
case DLL_PROCESS_DETACH:
DEBUGMSG(ZONE_INIT, (TEXT("CIR: DLL_PROCESS_DETACH\r\n")));
break;
}
return TRUE;
} // CIREntry
DWORD
CIR_Init(
DWORD dwContext
)
{
DEBUGMSG(ZONE_INIT,(TEXT("CIR: CIR_Init\r\n")));
return (DWORD)&g_bDeviceOpened;
} // CIR_Init
BOOL
CIR_Close(
DWORD Handle
)
{
DEBUGMSG(ZONE_IO, (TEXT("CIR: CIR_Close\r\n")));
g_bDeviceOpened=FALSE;
InterruptDisable(SYSINTR_PIO_CIR);
return TRUE;
} // CIR_Close
BOOL
CIR_Deinit(
DWORD dwContext // pointer to the per disk structure
)
{
return TRUE;
} // CIR_Deinit
//
// Returns handle value for the open instance.
//
DWORD
CIR_Open(
DWORD dwData,
DWORD dwAccess,
DWORD dwShareMode
)
{
if( g_bDeviceOpened )
return 0;
else
g_bDeviceOpened=TRUE;
g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if( g_hEvent == NULL )
{
RETAILMSG(1,(L" CIR failed to create event\r\n!"));
return 0;
}
if ( !InterruptInitialize(SYSINTR_PIO_CIR, g_hEvent, NULL, 0) )
{
RETAILMSG(1,(L"CIR failed to initialize interrupt. %d %d\r\n", SYSINTR_PIO_CIR, GetLastError( ) ));
return 0;
}
return (DWORD)&g_bDeviceOpened;
} // CIR_Open
//
// I/O Control function - responds to info, read and write control codes.
// The read and write take a scatter/gather list in pInBuf
//
BOOL
CIR_IOControl(
DWORD Handle,
DWORD dwIoControlCode,
PBYTE pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned
)
{
return FALSE;
} // CIR_IOControl
DWORD CIR_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
if ( WAIT_OBJECT_0 == WaitForSingleObject(g_hEvent,1000) )
{
KernelIoControl( IOCTL_HAL_PIO_CIR,
NULL,
0,
pBuffer,
20,
&dwNumBytes
);
InterruptDone(SYSINTR_PIO_CIR);
return dwNumBytes;
}
return (DWORD)-1;
}
DWORD CIR_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes){return 0;}
DWORD CIR_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod){return 0;}
void CIR_PowerUp(void){}
void CIR_PowerDown(void){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -