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

📄 main.cpp

📁 <windows驱动开发技术详解>源代码
💻 CPP
字号:
#include <windows.h>
#include <stdio.h>
//使用CTL_CODE必须加入winioctl.h
#include <winioctl.h>
#include "..\NT_Driver\Ioctls.h"

UCHAR In_8 (PUCHAR Port)
{
   UCHAR Value;
	__asm
	{
		mov edx, Port
		in al, dx
		mov Value, al
		//插入几个空指令
		nop
		nop
	}

   return(Value);
}

USHORT In_16 (PUSHORT Port)
{
   USHORT Value;

	__asm
	{
		mov edx, Port
		in ax, dx
		mov Value, ax
		//插入几个空指令
		nop
		nop
	}
   return(Value);
}

ULONG In_32 (PULONG Port)
{
   ULONG Value;
	__asm
	{
		mov edx, Port
		in eax, dx
		mov Value, eax
		//插入几个空指令
		nop
		nop
	}
   return(Value);
}

void Out_32(PULONG Port,ULONG Value)
{
	__asm
	{
		mov edx, Port
		mov eax, Value
		out dx,eax
		//插入几个空指令
		nop
		nop
	}
}
void Out_16 (PUSHORT Port,USHORT Value)
{
	__asm
	{
		mov edx, Port
		mov ax, Value
		out dx,ax
		//插入几个空指令
		nop
		nop
	}
}

void Out_8 (PUCHAR Port,UCHAR Value)
{
	__asm
	{
		mov edx, Port
		mov al, Value
		out dx,al
		//插入几个空指令
		nop
		nop
	}
}

void KernelModeFunction()
{
	//运行在ring0
	//所以能执行IO操作
	Out_8((PUCHAR)0x378,0);
}

int main()
{
	HANDLE hDevice = 
		CreateFile("\\\\.\\HelloDDK",
					GENERIC_READ | GENERIC_WRITE,
					0,		// share mode none
					NULL,	// no security
					OPEN_EXISTING,
					FILE_ATTRIBUTE_NORMAL,
					NULL );		// no template

	if (hDevice == INVALID_HANDLE_VALUE)
	{
		printf("Failed to obtain file handle to device: "
			"%s with Win32 error code: %d\n",
			"MyWDMDevice", GetLastError() );
		return 1;
	}

	DWORD dwOutput ;

	//类似于Out_8((PUCHAR)0x378,0);
	DWORD Function_Address = (DWORD)KernelModeFunction;
	//将KernelModeFunction函数的函数地址传入驱动
	DeviceIoControl(hDevice, IOCTL_KERNEL_FUNCTION, &Function_Address, 4, NULL, 0, &dwOutput, NULL);

	CloseHandle(hDevice);

	return 0;
}

⌨️ 快捷键说明

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