?? main.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
//所以能執(zhí)行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函數(shù)的函數(shù)地址傳入驅(qū)動
DeviceIoControl(hDevice, IOCTL_KERNEL_FUNCTION, &Function_Address, 4, NULL, 0, &dwOutput, NULL);
CloseHandle(hDevice);
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -