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

📄 simpledriver.c

📁 Wince5.0下流驱动范例。包括Makefile source *.def *.c *.h 5个文件!
💻 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 + -