PfSnIsVolumeMounted
NTSTATUS __stdcall PfSnIsVolumeMounted(WCHAR *VolumePath, UINT64 *VolumeMounted, UINT64 *RemovableMedia){
int VolumeInformationFile;
int v6;
UINT64 FsInformationClass;
UINT64 v9;
UINT64 ShareAccess;
UINT64 CreateDisposition;
UINT64 CreateOptions;
UINT64 v13;
__int64 FsInformation;
_UNICODE_STRING DestinationString;
_IO_STATUS_BLOCK IoStatusBlock;
_OBJECT_ATTRIBUTES ObjectAttributes;
VOID *FileHandle;
FileHandle = 0i64;
FsInformation = 0i64;
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
DestinationString = 0i64;
IoStatusBlock = 0i64;
RtlInitUnicodeString(&DestinationString, VolumePath);
LODWORD(v13) = 0;
ObjectAttributes.RootDirectory = 0i64;
LODWORD(CreateOptions) = 32;
LODWORD(CreateDisposition) = 1;
LODWORD(ShareAccess) = 7;
LODWORD(v9) = 0;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 576;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
VolumeInformationFile = NtCreateFile(
&FileHandle,
0x100080ui64,
&ObjectAttributes,
&IoStatusBlock,
0i64,
v9,
ShareAccess,
CreateDisposition,
CreateOptions,
0i64,
v13);
if( VolumeInformationFile >= 0 )
{
LODWORD(FsInformationClass) = 4;
VolumeInformationFile = NtQueryVolumeInformationFile(
(UINT64)FileHandle,
(UINT64)&IoStatusBlock,
(UINT64)&FsInformation,
8ui64,
FsInformationClass);
if( (VolumeInformationFile & 0xC0000000) != -1073741824 )
{
v6 = (HIDWORD(FsInformation) >> 5) & 1;
*(_DWORD *)RemovableMedia = BYTE4(FsInformation) & 1;
*(_DWORD *)VolumeMounted = v6;
VolumeInformationFile = 0;
}
NtClose((UINT64)FileHandle);
}
return VolumeInformationFile;
}Referenced by:
PfSnOpenVolumesForPrefetch