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

📄 dio.cpp

📁 win2000驱动程序开发
💻 CPP
字号:


#include "stdafx.h"
#include "DIO.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

HANDLE En_IO_Operation(){								
		HANDLE hDevice;									
		hDevice = CreateFile("\\\\.\\W2kIoDrv1",
					GENERIC_READ | GENERIC_WRITE,
					0,
					NULL,
					OPEN_EXISTING,
					FILE_ATTRIBUTE_NORMAL,
					NULL );								
		if (hDevice == INVALID_HANDLE_VALUE) {
	//		printf("Failed to enable the IO operation and the Win32 error code is: %d\n",GetLastError());
			exit(0);
		}
		return hDevice;
}

void Dis_IO_Operation(HANDLE hDevice)
{
	if (hDevice == INVALID_HANDLE_VALUE)
	{
	//	printf("The Windows 2000 IO Driver don't be opened!");
	}else
	{
		CloseHandle(hDevice);
	}
}

void Read(WORD PortNo,BYTE TransType,HANDLE hDevice,unsigned long DataCount,unsigned char *Data_ptr)
{
	unsigned long i,inCount,bR;
	void *userBuffer;	
	BOOL status;
	inCount=DataCount+sizeof(WORD)+sizeof(BYTE);

	userBuffer=malloc(inCount*sizeof(unsigned char));
	*((WORD *)userBuffer)=PortNo;
	*((BYTE *)((WORD *)userBuffer+1))=TransType;

	status=ReadFile(hDevice,userBuffer,inCount,&bR,NULL);
	if (!status) 
	{
//		printf("Failed on call to ReadFile and the Win32 error code: %d\n",GetLastError());
		exit(0);
	}
	for(i=0;i<DataCount;i++)
	{
		*(Data_ptr+i) = *((unsigned char *)userBuffer+i+sizeof(WORD)+sizeof(BYTE));
	}
}

void Write(WORD PortNo,BYTE TransType,HANDLE hDevice,unsigned long DataCount,void *Data_ptr)
{
	unsigned long i,inCount,bW;
	void *userBuffer;	
	BOOL status;

	switch(TransType)
	{
	case TRANS_BYTE:
		inCount=DataCount+sizeof(WORD)+sizeof(BYTE);
		userBuffer=malloc(inCount*sizeof(BYTE));
		break;
	case TRANS_WORD:
		inCount=DataCount*sizeof(WORD)+sizeof(WORD)+sizeof(BYTE);
		userBuffer=malloc(inCount*sizeof(unsigned char));
		break;
	case TRANS_DWORD:
		inCount=DataCount*sizeof(DWORD)+sizeof(WORD)+sizeof(BYTE);
		userBuffer=malloc(inCount*sizeof(unsigned char));
		break;

	default:
		break;
	}	
	
	*((WORD *)userBuffer)=PortNo;
	*((BYTE *)((WORD *)userBuffer+1))=TransType;
	for(i=0;i<DataCount;i++)
	{
		*((BYTE *)userBuffer+i+sizeof(WORD)+sizeof(BYTE))=*((BYTE *)Data_ptr+i);
	}
	status=WriteFile(hDevice,userBuffer,inCount,&bW,NULL);
	if (!status) 
	{
//		printf("Failed on call to WriteFile and the Win32 error code:%d\n",GetLastError());
//		exit(0);
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -