From: Pierre Schweitzer Date: Sun, 28 Oct 2018 10:12:45 +0000 (+0100) Subject: [FLTMGR] Implement FltGetVolumeName() X-Git-Tag: 0.4.12-dev~331 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=c5a314b0f2699b7c3e691be46f7a551d8a621708;ds=sidebyside [FLTMGR] Implement FltGetVolumeName() --- diff --git a/drivers/filters/fltmgr/Volume.c b/drivers/filters/fltmgr/Volume.c index b448fd31156..8e2a1339c82 100644 --- a/drivers/filters/fltmgr/Volume.c +++ b/drivers/filters/fltmgr/Volume.c @@ -190,5 +190,50 @@ FltDetachVolume( return STATUS_NOT_IMPLEMENTED; } +NTSTATUS +FLTAPI +FltGetVolumeName( + _In_ PFLT_VOLUME Volume, + _Inout_opt_ PUNICODE_STRING VolumeName, + _Out_opt_ PULONG BufferSizeNeeded) +{ + NTSTATUS Status; + + /* Check if caller just probes for size */ + if (VolumeName == NULL) + { + /* Totally broken call */ + if (BufferSizeNeeded == NULL) + { + return STATUS_INVALID_PARAMETER; + } + + /* Return the appropriate size and quit */ + *BufferSizeNeeded = Volume->DeviceName.Length; + return STATUS_BUFFER_TOO_SMALL; + } + + /* We have an output buffer! Assume it's too small */ + Status = STATUS_BUFFER_TOO_SMALL; + + /* If we have output size, fill it */ + if (BufferSizeNeeded != NULL) + { + *BufferSizeNeeded = Volume->DeviceName.Length; + } + + /* Init that we didn't return a thing */ + VolumeName->Length = 0; + + /* If we have enough room, copy and return success */ + if (VolumeName->MaximumLength >= Volume->DeviceName.Length) + { + RtlCopyUnicodeString(VolumeName, &Volume->DeviceName); + Status = STATUS_SUCCESS; + } + + return Status; +} + /* INTERNAL FUNCTIONS ******************************************************/ diff --git a/drivers/filters/fltmgr/fltmgr.spec b/drivers/filters/fltmgr/fltmgr.spec index 3bf66621c49..0cc2288ce08 100644 --- a/drivers/filters/fltmgr/fltmgr.spec +++ b/drivers/filters/fltmgr/fltmgr.spec @@ -17,4 +17,5 @@ @ stdcall FltCreateFileEx(ptr ptr ptr ptr long ptr ptr ptr long long long long ptr long long) @ stdcall FltCreateFile(ptr ptr ptr long ptr ptr ptr long long long long ptr long long) @ stdcall FltDetachVolume(ptr ptr ptr) + @ stdcall FltGetVolumeName(ptr ptr ptr)