Win7上sfilter的SfFsControlMountVolumeComplete代码 里的有关问题
Win7下sfilter的SfFsControlMountVolumeComplete代码 里的问题
一楼先贴代码
一楼先贴代码
NTSTATUS SfFsControlMountVolumeComplete (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PDEVICE_OBJECT NewDeviceObject)
{
PVPB vpb;
PSFILTER_DEVICE_EXTENSION newDevExt;
PIO_STACK_LOCATION irpSp;
PDEVICE_OBJECT attachedDeviceObject;
NTSTATUS status;
BOOLEAN justAttached = FALSE;
#if 1 // 要在底层文件系统mount完后,检测其是否是移动设备的
DWORD dwPos = 0;
char buf[256] = {0,0};
WCHAR wzLocalDrive[256] = {0, 0};
HANDLE ntFileHandle;
OBJECT_ATTRIBUTES oaVolumeDeviceAttributes;
STORAGE_DEVICE_DESCRIPTOR *pDevDesc = (STORAGE_DEVICE_DESCRIPTOR*)buf;
IO_STATUS_BLOCK IoStatusBlock;
BOOL bFindLocalDisk = FALSE;
#endif
PAGED_CODE();
newDevExt = NewDeviceObject->DeviceExtension;
irpSp = IoGetCurrentIrpStackLocation( Irp );
vpb = newDevExt->NLExtHeader.StorageStackDeviceObject->Vpb;
if (vpb != irpSp->Parameters.MountVolume.Vpb)
{
SF_LOG_PRINT( SFDEBUG_DISPLAY_ATTACHMENT_NAMES,
("SFilter!SfFsControlMountVolume: VPB in IRP stack changed %p IRPVPB=%p VPB=%p\n",
vpb->DeviceObject,
irpSp->Parameters.MountVolume.Vpb,
vpb) );
}
// 看看是否mount成功.
if (NT_SUCCESS( Irp->IoStatus.Status ))
{
SF_LOG_PRINT( SFDEBUG_DISPLAY_ATTACHMENT_NAMES,
("SFilter!SfFsControlMountVolume: Mount volume success for %p \"%wZ\", status=%08x\n",
DeviceObject,
&newDevExt->NLExtHeader.DeviceName,
Irp->IoStatus.Status) );
ExAcquireFastMutex( &gSfilterAttachLock );
if (!SfIsAttachedToDevice( vpb->DeviceObject, &attachedDeviceObject ))
{
if(IS_WINDOWSVISTA_OR_LATER()) {
// 在这里加入判断介质类型
SF_LOG_PRINT_VISTA( SFDEBUG_DISPLAY_JIM1, \