📄 simpledriver.c
字号:
#include <windows.h>
#include <types.h>
#include "SimpleDriver.h"
static BYTE g_Tmp=0; /*暂存数据变量*/
static DWORD g_OpenCount=0;/*驱动打开计数器*/
BOOL WINAPI DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved){
switch(dwReason){
case DLL_PROCESS_ATTACH:
RETAILMSG(1,(TEXT("SPL:DLL_PROCESS_ATTACH.\r\n"))); /*提示动态库加载*/
DisableThreadLibraryCalls((HMODULE)hInstDll);
break;
case DLL_PROCESS_DETACH:
RETAILMSG(1,(TEXT("SPL:DLL_PROCESS_DETACH.\r\n")));/*提示动态库卸载*/
break;
}
return (TRUE);
}
DWORD SPL_Init(DWORD dwContext){
RETAILMSG(1,(TEXT("::: SPL_Init.\r\n")));
g_Tmp=0;
g_OpenCount=0;
return 1; /*返回一个不为零的数表示成功*/
}
BOOL SPL_Deinit(DWORD dwContext){
RETAILMSG(1,(TEXT("::: SPL_DeInit.\r\n")));
g_Tmp=0;/*恢复全局变量的值*/
g_OpenCount=0;
return TRUE;
}
DWORD SPL_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode){
RETAILMSG(1,(TEXT("::: SPL_Open.\r\n")));
//不允许多个应用程序同时打开本驱动
if(g_OpenCount!=0){
RETAILMSG(1,(TEXT("SPL Open failed.\r\n")));
return 0;
}
g_OpenCount++;
return g_OpenCount;/*必须返回一个不为空的句柄*/
}
BOOL SPL_Close(DWORD hOpenContext){
RETAILMSG(1,(TEXT("::: SPL_Close.\r\n")));
if(g_OpenCount!=0){
g_OpenCount--;
}
return TRUE;
}
BOOL SPL_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
PDWORD pdwActralOut){
RETAILMSG(1,(TEXT("::: SPL_IOCOntrol.\r\n")));
return TRUE;
}
void SPL_PowerUp(void){
RETAILMSG(1,(TEXT("::: SPL_PowerUp.\r\n")));
}
void SPL_PowerDown(void){
RETAILMSG(1,(TEXT("::: SPL_PowerDown.\r\n")));
}
DWORD SPL_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count){
uchar * pReadBuffer;
RETAILMSG(1,(TEXT("::: SPL_Read.\r\n")));
if((pBuffer==NULL)||(Count<=0)){/*读函数入口参数错误*/
RETAILMSG(1,(TEXT("::: SPL_Read()parameter is error.\r\n")));
return 0;
}
pReadBuffer = MapPtrToProcess(pBuffer,GetCallerProcess());
*pReadBuffer=g_Tmp;/*返回数据*/
return 1;/*返回读取的字节数*/
}
DWORD SPL_Write(DWORD hOpenContext,LPCVOID pBuffer,DWORD Count){
uchar *pWriteBuffer;
RETAILMSG(1,(TEXT("::: SPL_Write.\r\n")));
if((pBuffer==NULL)||(Count<=0)){
RETAILMSG(1,(TEXT("::: SPL_Write()parameter is error.\r\n")));
return 0;
}
/*映射地址空间*/
pWriteBuffer=MapPtrToProcess((LPVOID)pBuffer,GetCallerProcess());
g_Tmp=*pWriteBuffer;/*保存数据*/
return 1;
}
DWORD SPL_Seek(DWORD hOpenContext,long Amout,DWORD Type){
RETAILMSG(1,(TEXT("::: SPL_Seek.\r\n")));
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -