mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-13 07:22:08 -05:00
dll: IRP_MJ_QUERY_VOLUME_INFORMATION
This commit is contained in:
parent
a25e30e4a2
commit
a7479b2b29
@ -34,6 +34,7 @@
|
|||||||
<ClCompile Include="..\..\src\dll\loop.c" />
|
<ClCompile Include="..\..\src\dll\loop.c" />
|
||||||
<ClCompile Include="..\..\src\dll\ntstatus.c" />
|
<ClCompile Include="..\..\src\dll\ntstatus.c" />
|
||||||
<ClCompile Include="..\..\src\dll\path.c" />
|
<ClCompile Include="..\..\src\dll\path.c" />
|
||||||
|
<ClCompile Include="..\..\src\dll\volinfo.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\src\dll\ntstatus.i" />
|
<None Include="..\..\src\dll\ntstatus.i" />
|
||||||
|
@ -55,6 +55,9 @@
|
|||||||
<ClCompile Include="..\..\src\dll\fileinfo.c">
|
<ClCompile Include="..\..\src\dll\fileinfo.c">
|
||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\dll\volinfo.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\src\dll\ntstatus.i">
|
<None Include="..\..\src\dll\ntstatus.i">
|
||||||
|
@ -33,6 +33,9 @@ typedef VOID FSP_FILE_SYSTEM_DISPATCHER(FSP_FILE_SYSTEM *, FSP_FSCTL_TRANSACT_RE
|
|||||||
typedef NTSTATUS FSP_FILE_SYSTEM_OPERATION(FSP_FILE_SYSTEM *, FSP_FSCTL_TRANSACT_REQ *);
|
typedef NTSTATUS FSP_FILE_SYSTEM_OPERATION(FSP_FILE_SYSTEM *, FSP_FSCTL_TRANSACT_REQ *);
|
||||||
typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
||||||
{
|
{
|
||||||
|
NTSTATUS (*GetVolumeInfo)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
|
FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
||||||
NTSTATUS (*GetSecurity)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*GetSecurity)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PWSTR FileName, PUINT32 PFileAttributes,
|
PWSTR FileName, PUINT32 PFileAttributes,
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize);
|
PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize);
|
||||||
@ -55,7 +58,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
VOID (*Close)(FSP_FILE_SYSTEM *FileSystem,
|
VOID (*Close)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode);
|
PVOID FileNode);
|
||||||
NTSTATUS (*GetInformation)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*GetFileInfo)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode,
|
PVOID FileNode,
|
||||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
@ -164,6 +167,8 @@ FSP_API NTSTATUS FspFileSystemOpClose(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request);
|
FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
FSP_API NTSTATUS FspFileSystemOpQueryInformation(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemOpQueryInformation(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request);
|
FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
|
FSP_API NTSTATUS FspFileSystemOpQueryVolumeInformation(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
FSP_API NTSTATUS FspFileSystemSendCreateResponse(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemSendCreateResponse(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, UINT_PTR Information,
|
FSP_FSCTL_TRANSACT_REQ *Request, UINT_PTR Information,
|
||||||
PVOID FileNode, UINT32 GrantedAccess, const FSP_FSCTL_FILE_INFO *FileInfo);
|
PVOID FileNode, UINT32 GrantedAccess, const FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
@ -176,6 +181,8 @@ FSP_API NTSTATUS FspFileSystemSendCloseResponse(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request);
|
FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
FSP_API NTSTATUS FspFileSystemSendQueryInformationResponse(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemSendQueryInformationResponse(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
|
FSP_API NTSTATUS FspFileSystemSendQueryVolumeInformationResponse(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
NTSTATUS FspAccessCheck(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS FspAccessCheck(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file dll/close.c
|
* @file dll/fileinfo.c
|
||||||
*
|
*
|
||||||
* @copyright 2015 Bill Zissimopoulos
|
* @copyright 2015 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
@ -12,10 +12,10 @@ FSP_API NTSTATUS FspFileSystemOpQueryInformation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
FSP_FSCTL_FILE_INFO FileInfo;
|
FSP_FSCTL_FILE_INFO FileInfo;
|
||||||
|
|
||||||
if (0 == FileSystem->Interface->GetInformation)
|
if (0 == FileSystem->Interface->GetFileInfo)
|
||||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
|
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);
|
(PVOID)Request->Req.Close.UserContext, &FileInfo);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||||
@ -30,7 +30,7 @@ FSP_API NTSTATUS FspFileSystemSendQueryInformationResponse(FSP_FILE_SYSTEM *File
|
|||||||
|
|
||||||
memset(&Response, 0, sizeof Response);
|
memset(&Response, 0, sizeof Response);
|
||||||
Response.Size = sizeof Response;
|
Response.Size = sizeof Response;
|
||||||
Response.Kind = FspFsctlTransactCloseKind;
|
Response.Kind = FspFsctlTransactQueryInformationKind;
|
||||||
Response.Hint = Request->Hint;
|
Response.Hint = Request->Hint;
|
||||||
Response.IoStatus.Status = STATUS_SUCCESS;
|
Response.IoStatus.Status = STATUS_SUCCESS;
|
||||||
Response.IoStatus.Information = 0;
|
Response.IoStatus.Information = 0;
|
||||||
|
@ -47,6 +47,7 @@ FSP_API NTSTATUS FspFileSystemCreate(PWSTR DevicePath,
|
|||||||
FileSystem->Operations[FspFsctlTransactCleanupKind] = FspFileSystemOpCleanup;
|
FileSystem->Operations[FspFsctlTransactCleanupKind] = FspFileSystemOpCleanup;
|
||||||
FileSystem->Operations[FspFsctlTransactCloseKind] = FspFileSystemOpClose;
|
FileSystem->Operations[FspFsctlTransactCloseKind] = FspFileSystemOpClose;
|
||||||
FileSystem->Operations[FspFsctlTransactQueryInformationKind] = FspFileSystemOpQueryInformation;
|
FileSystem->Operations[FspFsctlTransactQueryInformationKind] = FspFileSystemOpQueryInformation;
|
||||||
|
FileSystem->Operations[FspFsctlTransactQueryVolumeInformationKind] = FspFileSystemOpQueryVolumeInformation;
|
||||||
// !!!: ...
|
// !!!: ...
|
||||||
FileSystem->Interface = Interface;
|
FileSystem->Interface = Interface;
|
||||||
|
|
||||||
|
38
src/dll/volinfo.c
Normal file
38
src/dll/volinfo.c
Normal 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);
|
||||||
|
}
|
@ -187,6 +187,13 @@ BOOLEAN MemfsFileNodeMapHasChild(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NO
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NTSTATUS GetVolumeInfo(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
|
FSP_FSCTL_VOLUME_INFO *VolumeInfo)
|
||||||
|
{
|
||||||
|
return STATUS_INVALID_DEVICE_REQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PWSTR FileName, PUINT32 PFileAttributes,
|
PWSTR FileName, PUINT32 PFileAttributes,
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize)
|
PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize)
|
||||||
@ -364,7 +371,7 @@ static VOID Close(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
MemfsFileNodeDelete(FileNode);
|
MemfsFileNodeDelete(FileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS GetInformation(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS GetFileInfo(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode0,
|
PVOID FileNode0,
|
||||||
FSP_FSCTL_FILE_INFO *FileInfo)
|
FSP_FSCTL_FILE_INFO *FileInfo)
|
||||||
@ -378,13 +385,14 @@ static NTSTATUS GetInformation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
|
|
||||||
static FSP_FILE_SYSTEM_INTERFACE MemfsInterface =
|
static FSP_FILE_SYSTEM_INTERFACE MemfsInterface =
|
||||||
{
|
{
|
||||||
|
GetVolumeInfo,
|
||||||
GetSecurity,
|
GetSecurity,
|
||||||
Create,
|
Create,
|
||||||
Open,
|
Open,
|
||||||
Overwrite,
|
Overwrite,
|
||||||
Cleanup,
|
Cleanup,
|
||||||
Close,
|
Close,
|
||||||
GetInformation,
|
GetFileInfo,
|
||||||
};
|
};
|
||||||
|
|
||||||
static VOID MemfsEnterOperation(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request)
|
static VOID MemfsEnterOperation(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user