编写内核程序出错error求帮助

Crazy_Number 2012-06-07 07:03:19

#include <ntddk.h>

NTSTATUS IN_Dispatch(IN PDRIVER_OBJECT mydriver,IN PIRP irp);
void UnloadIN(IN PDRIVER_OBJECT mydriver);

#define FILE_DEVICE_IN 0x00008010
#define CONTROL_MOUSE 0x815
#define CONTROL_KEYBOARD 0x820

#define IOCTL_IN_MOUSE CTL_CODE(FILE_DEVICE_IN,\
CONTROL_MOUSE,\
METHOD_BUFFERED,\
FILE_ANY_ACCESS)
#define IOCTL_IN_KEYBOARD CTL_CODE(FILE_DEVICE_IN,\
CONTROL_KEYBOARD,\
METHOD_BUFFERED,\
FILE_ANY_ACCESS)

void SetDate(char scancode)
{
__asm
{
s:
in al, 0x64
and al, 10
jnz s

mov al, 0xD2

out 0x64, al

x:
in al, 0x64
and al, 10
jnz x

mov al, scancode
out 0x60, al
}
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
UNICODE_STRING DeviceNameUnicodeString;
UNICODE_STRING DeviceLinkUnicodeString;
NTSTATUS state = 0;
PDEVICE_OBJECT DeviceObject = 0;
RtlInitUnicodeString (&DeviceNameUnicodeString, L"\\Device\\IN_Mouse_Keyboard");
state= IoCreateDevice(DriverObject,0,&DeviceNameUnicodeString,FILE_DEVICE_IN,0,TRUE,&DeviceObject);
if(STATUS_SUCCESS == state)
{
size_t i;
for(i = 0;i<IRP_MJ_MAXIMUM_FUNCTION;++i)
{
DriverObject->MajorFunction[i] = IN_Dispatch;//在该行出错
}
DriverObject->DriverUnload= UnloadIN;
state = IoCreateSymbolicLink (&DeviceLinkUnicodeString,&DeviceNameUnicodeString);

if(!(STATUS_SUCCESS == state))
{
IoDeleteDevice(DeviceObject);
}
RtlInitUnicodeString (&DeviceLinkUnicodeString, L"\\DosDevices\\IN_Mouse_Keyboard");
}
else
return state;
}
NTSTATUS IN_Dispatch(IN PDRIVER_OBJECT mydriver,IN PIRP irp)
{
PIO_STACK_LOCATION IrpStack;
ULONG dwInputBufferLength;
ULONG dwOutputBufferLength;
ULONG dwIoControlCode;
PVOID pvIOBuffer;
NTSTATUS ntStatus;
UCHAR* InputBuffer;

// Init to default settings

irp->IoStatus.Status = STATUS_SUCCESS;
irp->IoStatus.Information = 0;

IrpStack = IoGetCurrentIrpStackLocation(irp);



pvIOBuffer = irp->AssociatedIrp.SystemBuffer;
dwInputBufferLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;
dwOutputBufferLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;

switch (IrpStack->MajorFunction)
{
case IRP_MJ_DEVICE_CONTROL:

dwIoControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;

switch (dwIoControlCode)
{
case IOCTL_IN_MOUSE:

break;

case IOCTL_IN_KEYBOARD:
InputBuffer = (UCHAR*)irp->AssociatedIrp.SystemBuffer;
SetDate(InputBuffer[0]);
SetDate(InputBuffer[1]);
break;

default:

irp->IoStatus.Status = STATUS_INVALID_PARAMETER;

break;
}

break;
}
ntStatus = irp->IoStatus.Status;

IoCompleteRequest (irp, IO_NO_INCREMENT);

return ntStatus;
}

void UnloadIN(IN PDRIVER_OBJECT mydriver)
{
UNICODE_STRING DeviceLinkUnicodeString;
NTSTATUS ntStatus;

RtlInitUnicodeString (&DeviceLinkUnicodeString, L"\\DosDevices\\IN_Mouse_Keyboard");

ntStatus = IoDeleteSymbolicLink (&DeviceLinkUnicodeString);

if (NT_SUCCESS(ntStatus))
{
IoDeleteDevice (mydriver->DeviceObject);
}
}





错误信息:
error C4028: formal parameter 1 different from declaration
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crazy_Number 2012-06-07
  • 打赏
  • 举报
回复
非常感谢fthislife,我的问题已经解决.
fthislife 2012-06-07
  • 打赏
  • 举报
回复
NTSTATUS IN_Dispatch(IN PDRIVER_OBJECT mydriver,IN PIRP irp);
改成
NTSTATUS IN_Dispatch(IN PDEVICE_OBJECT mydriver,IN PIRP irp);
  • 打赏
  • 举报
回复
错误信息就这么多了啊~~~

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧