Skip to content

Commit

Permalink
sys - Missing changes from previous cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Liryna committed Jun 1, 2020
1 parent 4cc52e6 commit df89a7b
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 53 deletions.
36 changes: 13 additions & 23 deletions sys/create.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,20 +254,6 @@ void FixFileNameForReparseMountPoint(__in const UNICODE_STRING *MountPoint,
}
}

LONG DokanUnicodeStringChar(__in PUNICODE_STRING UnicodeString,
__in WCHAR Char) {
return DokanStringChar(UnicodeString->Buffer, UnicodeString->Length, Char);
}

LONG DokanStringChar(__in PWCHAR String, __in ULONG Length, __in WCHAR Char) {
for (ULONG i = 0; i < Length / sizeof(WCHAR); ++i) {
if (String[i] == Char) {
return i;
}
}
return -1;
}

VOID SetFileObjectForVCB(__in PFILE_OBJECT FileObject, __in PDokanVCB Vcb) {
FileObject->SectionObjectPointer = &Vcb->SectionObjectPointers;
FileObject->FsContext = &Vcb->VolumeFileHeader;
Expand Down Expand Up @@ -461,6 +447,8 @@ Return Value:
if (IsDokanProcessFiles(fileObject->FileName)) {
DDbgPrint(" Dokan Process file called before startup finished\n");
} else {
// We want to always dispatch non-root opens so we don't have to
// special-case anything here, but it needs a lot of testing.
DDbgPrint(" Here we only go in if some antivirus software tries to "
"create files before startup is finished.\n");
if (fileObject->FileName.Length > 0) {
Expand Down Expand Up @@ -592,7 +580,7 @@ Return Value:

// don't open file like stream
if (!dcb->UseAltStream &&
DokanUnicodeStringChar(&fileObject->FileName, L':') != -1) {
DokanSearchUnicodeStringChar(&fileObject->FileName, L':') != -1) {
DDbgPrint(" alternate stream\n");
status = STATUS_INVALID_PARAMETER;
info = 0;
Expand Down Expand Up @@ -1000,7 +988,8 @@ Return Value:

if (!NT_SUCCESS(status)) {

DDbgPrint(" DokanCheckShareAccess failed with 0x%x\n", status);
DDbgPrint(" DokanCheckShareAccess failed with 0x%x %ls\n", status,
DokanGetNTSTATUSStr(status));

NTSTATUS OplockBreakStatus = STATUS_SUCCESS;

Expand Down Expand Up @@ -1042,8 +1031,8 @@ Return Value:
// we want to return that now.
//
} else if (!NT_SUCCESS(OplockBreakStatus)) {
DDbgPrint(" FsRtlOplockBreakH returned 0x%x\n",
OplockBreakStatus);
DDbgPrint(" FsRtlOplockBreakH returned 0x%x %ls\n",
OplockBreakStatus, DokanGetNTSTATUSStr(OplockBreakStatus));
status = OplockBreakStatus;
__leave;

Expand Down Expand Up @@ -1175,9 +1164,10 @@ Return Value:
//
if ((status != STATUS_SUCCESS) &&
(status != STATUS_OPLOCK_BREAK_IN_PROGRESS)) {
DDbgPrint(" FsRtlOplockFsctrl failed with 0x%x, fcb = %p, "
"fileCount = %lu\n",
status, fcb, fcb->FileCount);
DDbgPrint(
" FsRtlOplockFsctrl failed with 0x%x %ls, fcb = %p, "
"fileCount = %lu\n",
status, DokanGetNTSTATUSStr(status), fcb, fcb->FileCount);

__leave;
} else if (status == STATUS_OPLOCK_BREAK_IN_PROGRESS) {
Expand Down Expand Up @@ -1373,8 +1363,8 @@ VOID DokanCompleteCreate(__in PIRP_ENTRY IrpEntry,
}
ccb->AtomicOplockRequestPending = FALSE;
} else {
DDbgPrint(" IRP_MJ_CREATE failed. Free CCB:%p. Status 0x%x\n", ccb,
status);
DDbgPrint(" IRP_MJ_CREATE failed. Free CCB:%p. Status 0x%x %ls\n", ccb,
status, DokanGetNTSTATUSStr(status));
DokanMaybeBackOutAtomicOplockRequest(ccb, irp);
DokanFreeCCB(ccb);
IoRemoveShareAccess(irpSp->FileObject, &fcb->ShareAccess);
Expand Down
3 changes: 2 additions & 1 deletion sys/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -766,7 +766,8 @@ DiskDeviceControlWithLock(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) {

status = IoAcquireRemoveLock(&dcb->RemoveLock, Irp);
if (!NT_SUCCESS(status)) {
DDbgPrint("IoAcquireRemoveLock failed with %#x", status);
DDbgPrint("IoAcquireRemoveLock failed with %#x %ls", status,
DokanGetNTSTATUSStr(status));
return STATUS_INSUFFICIENT_RESOURCES;
}

Expand Down
9 changes: 5 additions & 4 deletions sys/dokan.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,8 @@ DokanLookasideCreate(LOOKASIDE_LIST_EX *pCache, size_t cbElement) {
pCache, NULL, NULL, NonPagedPool, 0, cbElement, TAG, 0);

if (!NT_SUCCESS(Status)) {
DDbgPrint("ExInitializeLookasideListEx failed, Status (0x%x)", Status);
DDbgPrint("ExInitializeLookasideListEx failed, Status (0x%x) %ls\n", Status,
DokanGetNTSTATUSStr(Status));
return FALSE;
}

Expand Down Expand Up @@ -317,8 +318,8 @@ Return Value:

if (!NT_SUCCESS(status)) {
CleanupGlobalDiskDevice(dokanGlobal);
DDbgPrint(" FsRtlRegisterFileSystemFilterCallbacks returned 0x%x\n",
status);
DDbgPrint(" FsRtlRegisterFileSystemFilterCallbacks returned 0x%x %ls\n",
status, DokanGetNTSTATUSStr(status));
return status;
}

Expand Down Expand Up @@ -498,7 +499,7 @@ NTSTATUS DokanNotifyReportChange0(__in PDokanFCB Fcb,

// Alternate streams are supposed to use a different set of action
// and filter values, but we do not expect the caller to be aware of this.
if (DokanUnicodeStringChar(FileName, L':') != -1) { //FileStream
if (DokanSearchUnicodeStringChar(FileName, L':') != -1) { // FileStream

//Convert file action to stream action
switch (Action) {
Expand Down
6 changes: 0 additions & 6 deletions sys/dokan.h
Original file line number Diff line number Diff line change
Expand Up @@ -852,12 +852,6 @@ DRIVER_DISPATCH DokanResetPendingIrpTimeout;

DRIVER_DISPATCH DokanGetAccessToken;

LONG
DokanUnicodeStringChar(__in PUNICODE_STRING UnicodeString,
__in WCHAR Char);

LONG DokanStringChar(__in PWCHAR String, __in ULONG Length, __in WCHAR Char);

NTSTATUS
DokanCheckShareAccess(_In_ PFILE_OBJECT FileObject, _In_ PDokanFCB FcbOrDcb,
_In_ ACCESS_MASK DesiredAccess, _In_ ULONG ShareAccess);
Expand Down
4 changes: 2 additions & 2 deletions sys/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -608,9 +608,9 @@ DokanEventStart(__in PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp) {
startFailure = TRUE;
}

if (DokanStringChar(eventStart->MountPoint,
if (DokanSearchStringChar(eventStart->MountPoint,
sizeof(eventStart->MountPoint), '\0') == -1 ||
DokanStringChar(eventStart->UNCName,
DokanSearchStringChar(eventStart->UNCName,
sizeof(eventStart->UNCName), '\0') == -1) {
DokanLogInfo(&logger, L"MountPoint / UNCName provided are not null "
L"terminated in event start.");
Expand Down
4 changes: 3 additions & 1 deletion sys/fscontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,8 @@ NTSTATUS DokanOplockRequest(__in PIRP *pIrp) {
DokanVCBUnlock(Fcb->Vcb);
}

DDbgPrint(" DokanOplockRequest return 0x%x\n", Status);
DDbgPrint(" DokanOplockRequest return 0x%x %ls\n", Status,
DokanGetNTSTATUSStr(Status));
}

return Status;
Expand Down Expand Up @@ -762,6 +763,7 @@ NTSTATUS DokanMountVolume(__in PDEVICE_OBJECT DiskDevice, __in PIRP Irp) {
vcb->DeviceObject = volDeviceObject;
vcb->Dcb = dcb;
vcb->ResourceLogger.DriverObject = DriverObject;
vcb->ValidFcbMask = 0xffffffffffffffff;
dcb->Vcb = vcb;

if (vcb->Dcb->FcbGarbageCollectionIntervalMs != 0) {
Expand Down
16 changes: 10 additions & 6 deletions sys/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -939,7 +939,8 @@ DokanCreateGlobalDiskDevice(__in PDRIVER_OBJECT DriverObject,
&deviceObject); // DeviceObject

if (!NT_SUCCESS(status)) {
DDbgPrint(" IoCreateDevice returned 0x%x\n", status);
DDbgPrint(" IoCreateDevice returned 0x%x %ls\n", status,
DokanGetNTSTATUSStr(status));
return status;
}
DDbgPrint("DokanGlobalDevice: %wZ created\n", &deviceName);
Expand All @@ -957,7 +958,8 @@ DokanCreateGlobalDiskDevice(__in PDRIVER_OBJECT DriverObject,
&fsDiskDeviceObject); // DeviceObject

if (!NT_SUCCESS(status)) {
DDbgPrint(" IoCreateDevice Disk FileSystem failed: 0x%x\n", status);
DDbgPrint(" IoCreateDevice Disk FileSystem failed: 0x%x %ls\n", status,
DokanGetNTSTATUSStr(status));
IoDeleteDevice(deviceObject);
return status;
}
Expand All @@ -974,7 +976,8 @@ DokanCreateGlobalDiskDevice(__in PDRIVER_OBJECT DriverObject,
&fsCdDeviceObject); // DeviceObject

if (!NT_SUCCESS(status)) {
DDbgPrint(" IoCreateDevice Cd FileSystem failed: 0x%x\n", status);
DDbgPrint(" IoCreateDevice Cd FileSystem failed: 0x%x %ls\n", status,
DokanGetNTSTATUSStr(status));
IoDeleteDevice(fsDiskDeviceObject);
IoDeleteDevice(deviceObject);
return status;
Expand All @@ -985,7 +988,8 @@ DokanCreateGlobalDiskDevice(__in PDRIVER_OBJECT DriverObject,

status = IoCreateSymbolicLink(&symbolicLinkName, &deviceName);
if (!NT_SUCCESS(status)) {
DDbgPrint(" IoCreateSymbolicLink returned 0x%x\n", status);
DDbgPrint(" IoCreateSymbolicLink returned 0x%x %ls\n", status,
DokanGetNTSTATUSStr(status));
IoDeleteDevice(fsDiskDeviceObject);
IoDeleteDevice(fsCdDeviceObject);
IoDeleteDevice(deviceObject);
Expand Down Expand Up @@ -1106,8 +1110,8 @@ VOID DokanCreateMountPointSysProc(__in PVOID pDcb) {
}
status = IoCreateSymbolicLink(Dcb->MountPoint, Dcb->DiskDeviceName);
if (!NT_SUCCESS(status)) {
DDbgPrint("IoCreateSymbolicLink for mount point %wZ failed: 0x%X\n",
Dcb->MountPoint, status);
DDbgPrint("IoCreateSymbolicLink for mount point %wZ failed: 0x%X %ls\n",
Dcb->MountPoint, status, DokanGetNTSTATUSStr(status));
}

DDbgPrint("<= DokanCreateMountPointSysProc\n");
Expand Down
2 changes: 2 additions & 0 deletions sys/public.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#define DOKAN_DISK_FILE_SYSTEM 0
#define DOKAN_NETWORK_FILE_SYSTEM 1

// Special files that are tagged for specfic FS purpose when their FCB is init.
// Note: This file names can no longer be used by userland FS correctly.
#define DOKAN_KEEPALIVE_FILE_NAME L"\\__drive_fs_keepalive"
#define DOKAN_NOTIFICATION_FILE_NAME L"\\drive_fs_notification"

Expand Down
10 changes: 0 additions & 10 deletions sys/read.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,16 +339,6 @@ VOID DokanCompleteRead(__in PIRP_ENTRY IrpEntry,
IrpEntry->Flags &= ~DOKAN_MDL_ALLOCATED;
}

if (NT_SUCCESS(status)) {
DDbgPrint(" STATUS_SUCCESS\n");
} else if (status == STATUS_INSUFFICIENT_RESOURCES) {
DDbgPrint(" STATUS_INSUFFICIENT_RESOURCES\n");
} else if (status == STATUS_END_OF_FILE) {
DDbgPrint(" STATUS_END_OF_FILE\n");
} else {
DDbgPrint(" status = 0x%X\n", status);
}

DokanCompleteIrpRequest(irp, status, readLength);

DDbgPrint("<== DokanCompleteRead\n");
Expand Down

0 comments on commit df89a7b

Please sign in to comment.