dll: cleanup, close

This commit is contained in:
Bill Zissimopoulos 2016-01-04 17:14:49 -08:00
parent cfb69319f7
commit dc9f95e8a6
6 changed files with 88 additions and 0 deletions

View File

@ -25,6 +25,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\src\dll\access.c" /> <ClCompile Include="..\..\src\dll\access.c" />
<ClCompile Include="..\..\src\dll\cleanup.c" />
<ClCompile Include="..\..\src\dll\close.c" />
<ClCompile Include="..\..\src\dll\create.c" /> <ClCompile Include="..\..\src\dll\create.c" />
<ClCompile Include="..\..\src\dll\debug.c" /> <ClCompile Include="..\..\src\dll\debug.c" />
<ClCompile Include="..\..\src\dll\fsctl.c" /> <ClCompile Include="..\..\src\dll\fsctl.c" />

View File

@ -49,6 +49,12 @@
<ClCompile Include="..\..\src\dll\path.c"> <ClCompile Include="..\..\src\dll\path.c">
<Filter>Source</Filter> <Filter>Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\dll\close.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\dll\cleanup.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\src\dll\ntstatus.i"> <None Include="..\..\src\dll\ntstatus.i">

View File

@ -64,6 +64,8 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN Supersede, FSP_FILE_NODE **PFileNode); FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN Supersede, FSP_FILE_NODE **PFileNode);
NTSTATUS (*FileOpenParentDirectory)(FSP_FILE_SYSTEM *FileSystem, NTSTATUS (*FileOpenParentDirectory)(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FILE_NODE **PFileNode, PBOOLEAN PFileExists); FSP_FSCTL_TRANSACT_REQ *Request, FSP_FILE_NODE **PFileNode, PBOOLEAN PFileExists);
NTSTATUS (*FileCleanup)(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FILE_NODE *FileNode);
NTSTATUS (*FileClose)(FSP_FILE_SYSTEM *FileSystem, NTSTATUS (*FileClose)(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FILE_NODE *FileNode); FSP_FSCTL_TRANSACT_REQ *Request, FSP_FILE_NODE *FileNode);
} FSP_FILE_SYSTEM_INTERFACE; } FSP_FILE_SYSTEM_INTERFACE;
@ -151,9 +153,17 @@ FSP_API NTSTATUS FspFileSystemSendResponseWithStatus(FSP_FILE_SYSTEM *FileSystem
*/ */
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem, FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request); FSP_FSCTL_TRANSACT_REQ *Request);
FSP_API NTSTATUS FspFileSystemOpCleanup(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request);
FSP_API NTSTATUS FspFileSystemOpClose(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,
FSP_FILE_NODE *FileNode, DWORD GrantedAccess); FSP_FILE_NODE *FileNode, DWORD GrantedAccess);
FSP_API NTSTATUS FspFileSystemSendCloseResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request);
FSP_API NTSTATUS FspFileSystemSendCleanupResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request);
/* /*
* Access Checks * Access Checks

34
src/dll/cleanup.c Normal file
View File

@ -0,0 +1,34 @@
/**
* @file dll/cleanup.c
*
* @copyright 2015 Bill Zissimopoulos
*/
#include <dll/library.h>
FSP_API NTSTATUS FspFileSystemOpCleanup(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
if (0 == FileSystem->Interface->FileCleanup)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
FSP_FILE_NODE *FileNode = (PVOID)Request->Req.Close.UserContext;
FileSystem->Interface->FileCleanup(FileSystem, Request, FileNode);
return FspFileSystemSendCleanupResponse(FileSystem, Request);
}
FSP_API NTSTATUS FspFileSystemSendCleanupResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
FSP_FSCTL_TRANSACT_RSP Response;
memset(&Response, 0, sizeof Response);
Response.Size = sizeof Response;
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = 0;
return FspFileSystemSendResponse(FileSystem, &Response);
}

34
src/dll/close.c Normal file
View File

@ -0,0 +1,34 @@
/**
* @file dll/close.c
*
* @copyright 2015 Bill Zissimopoulos
*/
#include <dll/library.h>
FSP_API NTSTATUS FspFileSystemOpClose(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
if (0 == FileSystem->Interface->FileClose)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_DEVICE_REQUEST);
FSP_FILE_NODE *FileNode = (PVOID)Request->Req.Close.UserContext;
FileSystem->Interface->FileClose(FileSystem, Request, FileNode);
return FspFileSystemSendCloseResponse(FileSystem, Request);
}
FSP_API NTSTATUS FspFileSystemSendCloseResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
FSP_FSCTL_TRANSACT_RSP Response;
memset(&Response, 0, sizeof Response);
Response.Size = sizeof Response;
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = 0;
return FspFileSystemSendResponse(FileSystem, &Response);
}

View File

@ -43,6 +43,8 @@ FSP_API NTSTATUS FspFileSystemCreate(PWSTR DevicePath,
FileSystem->Dispatcher = FspFileSystemDirectDispatcher; FileSystem->Dispatcher = FspFileSystemDirectDispatcher;
FileSystem->Operations[FspFsctlTransactCreateKind] = FspFileSystemOpCreate; FileSystem->Operations[FspFsctlTransactCreateKind] = FspFileSystemOpCreate;
FileSystem->Operations[FspFsctlTransactCleanupKind] = FspFileSystemOpCleanup;
FileSystem->Operations[FspFsctlTransactCloseKind] = FspFileSystemOpClose;
// !!!: ... // !!!: ...
FileSystem->Interface = Interface; FileSystem->Interface = Interface;