|
发表于 2018-6-29 10:22:32
|
显示全部楼层
本帖最后由 dong123ohyes 于 2018-6-29 10:55 编辑
最近在编译64位的驱动sermon.sys,但下面代码ptr->CheckValid()的时候总是返回false。猜测是ptr指针有问题,32位的时候是4字节,64位使用的8字节。
有没有人编译出64位的驱动文件sermon.sys了?有的话能提供下吗,谢谢!
case IOCTL_SERMON_GETINFOSIZE:
{
if (curIRPStack->Parameters.DeviceIoControl.InputBufferLength==sizeof(MHANDLE))//typedef ULONG_PTR MHANDLE;
{
MHANDLE mh=*((MHANDLE *)Irp->AssociatedIrp.SystemBuffer);
CAttachedDevice *ptr=(CAttachedDevice *) mh;
if (ptr && ptr->CheckValid() &&
curIRPStack->Parameters.DeviceIoControl.OutputBufferLength==sizeof(ULONG))
{
return ptr->GetNextSize(Irp);
}
else
{
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
}
}
else
{
Irp->IoStatus.Status = STATUS_INVALID_HANDLE;
}
Irp->IoStatus.Information = 0;
break;
}
///////////////////
BOOLEAN CheckValid(void)
{
return (MmIsAddressValid(this) && Signature[0]==L'B' && Signature[1]==L'A' && Signature[2]==L'V');
}; |
|