最近老板接了一个项目 要用到 NDIS驱动放方面的东西 老板让我搞搞 但是我以前并没有接触过驱动 ..但是老板命令不可违....这几天就看了一下 NDIS相关的知识 然后开始试着写写代码
现在..遇到了问题 实在解决不了 百度也百度不到答案 ..只能来到这里求助
问题描述: 我现在是要做一个 NDIS 和应用层通过DeviceIoControl进行通信 下面是 应用层代码
//开始按钮处理
void CuuvpnDlg::OnStartBtn()
{
char name[100]="\\\\.\\uu_link";
handle=CreateFileA(name,GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (handle == INVALID_HANDLE_VALUE)
{
char err[40]="";
sprintf(err,"错误代码:%d", GetLastError());
OutErrror(err);
return ;
}
DWORD dwWrite;
int data[2]={100,200};
int result=0;
DeviceIoControl(handle, PF_DRIVER_START , data, 8, &result, 4, &dwWrite, NULL);
CloseHandle(handle);
}
//然后是 NDIS 代码
//事件分派处理函数
NTSTATUS OnDeviceControl(PIO_STACK_LOCATION stack,PIRP irp)
{
//进行处理
int info=0;
int inlen=stack->Parameters.DeviceIoControl.InputBufferLength;
int outlen=stack->Parameters.DeviceIoControl.OutputBufferLength;
int *buff=(int*)irp->AssociatedIrp.SystemBuffer;
DWORD kzm=stack->Parameters.DeviceIoControl.IoControlCode;
int len=0;
//分发函数标志
DWORD irpflag=stack->MajorFunction;
//根据控制码分发函数
switch(irpflag)
{
case IRP_MJ_DEVICE_CONTROL:
{
switch(kzm)
{
case PF_DRIVER_START:
{
//获取输入缓冲区
KdPrint(("START__收到来自应用层的消息\r\n"));
KdPrint(("buff:%X\r\n",buff));
//下面这句 去掉注释就蓝屏 这是怎么回事呢
//KdPrint(("应用层传来的数据是:%d,%d",buff[0],buff[1]));
m_flag=0;
info=0;
break;
}
case PF_DRIVER_STOP:
{
//获取输入缓冲区
KdPrint(("STOP__收到来自应用层的消息\r\n"));
// KdPrint(("应用层传来的数据是:%d,%d",buff[0],buff[1]));
// m_flag=0;
info=0;
break;
}
}
}
}
//处理结束
irp->IoStatus.Information=info;
irp->IoStatus.Status=STATUS_SUCCESS;
IoCompleteRequest(irp,IO_NO_INCREMENT);//指示完成此IRP
return STATUS_SUCCESS;
}
//问题 是 我获取到的缓冲区指针一直是 NULL 不知道是哪里出问题了 在网上找了一些相关的NDIS和应用层的通信源码编译后 我所获得的缓冲区依旧是 0 求助 有知道的 回帖 或者联系我的QQ 956184289
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课