catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
阅读:2347回复:1

求助自写虚拟磁盘 回应MOUNTMGR的IOCTL_MOUNTDEV_QUERY_DEVICE_NAME

楼主#
更多 发布于:2011-09-08 11:51
自写虚拟磁盘 回应MOUNTMGR的IOCTL_MOUNTDEV_QUERY_DEVICE_NAME 但是MOUNTMGR并不给予足够长BUFFER为什么?
代码如下
case IOCTL_MOUNTDEV_QUERY_DEVICE_NAME:
{
PMOUNTDEV_NAME mountName = Irp->AssociatedIrp.SystemBuffer;
ULONG Retlength = 0;
WCHAR tmp[256] = {0};
UNICODE_STRING ntUnicodeString;

if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(MOUNTDEV_NAME))
return DouboxRequestComplete(DeviceObject, Irp, STATUS_BUFFER_OVERFLOW, sizeof (MOUNTDEV_NAME));


G_SptDynamicFunction.sptSnwprintf(
tmp,
256,
L"\\DosDevices\\%wc:",
volumeDeviceExtension->driveLetter);
RtlInitUnicodeString (&ntUnicodeString, tmp);

mountName->NameLength = ntUnicodeString.Length;
Retlength = ntUnicodeString.Length + sizeof(USHORT);

if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < Retlength)
{
return DouboxRequestComplete(DeviceObject, Irp, STATUS_BUFFER_OVERFLOW, sizeof (MOUNTDEV_NAME));
}
RtlCopyMemory ((PCHAR)mountName->Name,ntUnicodeString.Buffer, ntUnicodeString.Length);


return DouboxRequestComplete(DeviceObject, Irp, STATUS_SUCCESS, Retlength);
}


每次给予的OUTBUFFER长度都是4
Millsap
驱动牛犊
驱动牛犊
  • 注册日期2010-12-10
  • 最后登录2015-01-20
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2012-02-13 10:48
飘过
游客

返回顶部