in Silhouette/Filter_Main.cpp [229:278]
NTSTATUS InstanceSetupCallback(
PCFLT_RELATED_OBJECTS FltObjects,
FLT_INSTANCE_SETUP_FLAGS Flags,
DEVICE_TYPE VolumeDeviceType,
FLT_FILESYSTEM_TYPE VolumeFilesystemType
)
{
UNREFERENCED_PARAMETER(FltObjects);
UNREFERENCED_PARAMETER(Flags);
UNREFERENCED_PARAMETER(VolumeDeviceType);
UNREFERENCED_PARAMETER(VolumeFilesystemType);
NTSTATUS ntStatus = STATUS_SUCCESS;
UNICODE_STRING volumeName = { 0, };
PWCHAR pBuffer = NULL;
ULONG volumeNameLength = 0;
ntStatus = FltGetVolumeName(FltObjects->Volume, NULL, &volumeNameLength);
pBuffer = (PWCHAR)ExAllocatePoolWithTag(PagedPool, volumeNameLength, POOL_TAG);
if (!pBuffer)
{
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto Cleanup;
}
RtlInitEmptyUnicodeString(&volumeName, pBuffer, (USHORT)volumeNameLength);
ntStatus = FltGetVolumeName(FltObjects->Volume, &volumeName, &volumeNameLength);
if (!NT_SUCCESS(ntStatus))
{
goto Cleanup;
}
// Volume Reads
// Flags == FLTFL_INSTANCE_SETUP_AUTOMATIC_ATTACHMENT
// VolumeDeviceType == FILE_DEVICE_DISK_FILE_SYSTEM
// VolumeFilesystemType == FLT_FSTYPE_NTFS
// TODO: Raw disk reads
#if 0
DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,
"Silhouette: InstanceSetupCallback for Flags: 0x%x DevType: %u FS: %u for %wZ\n",
Flags, VolumeDeviceType, VolumeFilesystemType, &volumeName);
#endif
Cleanup:
PoolDeleteWithTag(pBuffer, POOL_TAG);
return STATUS_SUCCESS;
}