dll: IRP_MJ_QUERY_VOLUME_INFORMATION

This commit is contained in:
Bill Zissimopoulos
2016-01-25 13:46:52 -08:00
parent a25e30e4a2
commit a7479b2b29
7 changed files with 65 additions and 7 deletions

View File

@ -1,5 +1,5 @@
/**
* @file dll/close.c
* @file dll/fileinfo.c
*
* @copyright 2015 Bill Zissimopoulos
*/
@ -12,10 +12,10 @@ FSP_API NTSTATUS FspFileSystemOpQueryInformation(FSP_FILE_SYSTEM *FileSystem,
NTSTATUS Result;
FSP_FSCTL_FILE_INFO FileInfo;
if (0 == FileSystem->Interface->GetInformation)
if (0 == FileSystem->Interface->GetFileInfo)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
Result = FileSystem->Interface->GetInformation(FileSystem, Request,
Result = FileSystem->Interface->GetFileInfo(FileSystem, Request,
(PVOID)Request->Req.Close.UserContext, &FileInfo);
if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
@ -30,7 +30,7 @@ FSP_API NTSTATUS FspFileSystemSendQueryInformationResponse(FSP_FILE_SYSTEM *File
memset(&Response, 0, sizeof Response);
Response.Size = sizeof Response;
Response.Kind = FspFsctlTransactCloseKind;
Response.Kind = FspFsctlTransactQueryInformationKind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = 0;

View File

@ -47,6 +47,7 @@ FSP_API NTSTATUS FspFileSystemCreate(PWSTR DevicePath,
FileSystem->Operations[FspFsctlTransactCleanupKind] = FspFileSystemOpCleanup;
FileSystem->Operations[FspFsctlTransactCloseKind] = FspFileSystemOpClose;
FileSystem->Operations[FspFsctlTransactQueryInformationKind] = FspFileSystemOpQueryInformation;
FileSystem->Operations[FspFsctlTransactQueryVolumeInformationKind] = FspFileSystemOpQueryVolumeInformation;
// !!!: ...
FileSystem->Interface = Interface;

38
src/dll/volinfo.c Normal file
View File

@ -0,0 +1,38 @@
/**
* @file dll/volinfo.c
*
* @copyright 2015 Bill Zissimopoulos
*/
#include <dll/library.h>
FSP_API NTSTATUS FspFileSystemOpQueryVolumeInformation(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
NTSTATUS Result;
FSP_FSCTL_VOLUME_INFO VolumeInfo;
if (0 == FileSystem->Interface->GetVolumeInfo)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
Result = FileSystem->Interface->GetVolumeInfo(FileSystem, Request, &VolumeInfo);
if (!NT_SUCCESS(Result))
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
return FspFileSystemSendQueryVolumeInformationResponse(FileSystem, Request, &VolumeInfo);
}
FSP_API NTSTATUS FspFileSystemSendQueryVolumeInformationResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_VOLUME_INFO *VolumeInfo)
{
FSP_FSCTL_TRANSACT_RSP Response;
memset(&Response, 0, sizeof Response);
Response.Size = sizeof Response;
Response.Kind = FspFsctlTransactQueryVolumeInformationKind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = 0;
Response.Rsp.QueryVolumeInformation.VolumeInfo = *VolumeInfo;
return FspFileSystemSendResponse(FileSystem, &Response);
}