From f52e36e76ed0f1da3f133480e7b170d824377cba Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Tue, 17 Nov 2015 23:11:47 -0800 Subject: [PATCH] sys: HasDbgBreakPoint and flesh out IRP handlers (to return STATUS_INVALID_REQUEST) --- src/sys/cleanup.c | 4 +++- src/sys/close.c | 4 +++- src/sys/create.c | 4 +++- src/sys/debug.c | 11 +++++++++++ src/sys/devctrl.c | 4 +++- src/sys/dirctrl.c | 4 +++- src/sys/driver.h | 4 +++- src/sys/ea.c | 8 ++++++-- src/sys/fileinfo.c | 8 ++++++-- src/sys/flush.c | 4 +++- src/sys/fsctrl.c | 4 +++- src/sys/lockctrl.c | 4 +++- src/sys/read.c | 4 +++- src/sys/security.c | 8 ++++++-- src/sys/shutdown.c | 4 +++- src/sys/volinfo.c | 8 ++++++-- src/sys/write.c | 4 +++- 17 files changed, 71 insertions(+), 20 deletions(-) diff --git a/src/sys/cleanup.c b/src/sys/cleanup.c index 0e8d136c..8a88db04 100644 --- a/src/sys/cleanup.c +++ b/src/sys/cleanup.c @@ -19,7 +19,9 @@ FspCleanup( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/close.c b/src/sys/close.c index 081bb10b..998e7a0f 100644 --- a/src/sys/close.c +++ b/src/sys/close.c @@ -19,7 +19,9 @@ FspClose( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/create.c b/src/sys/create.c index 2c68c50a..13283631 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -19,7 +19,9 @@ FspCreate( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/debug.c b/src/sys/debug.c index 53deb3f5..6c6caeb5 100644 --- a/src/sys/debug.c +++ b/src/sys/debug.c @@ -7,6 +7,17 @@ #include #if DBG +static ANSI_STRING DbgBreakPointInc = RTL_CONSTANT_STRING("Fsp*"); +BOOLEAN HasDbgBreakPoint(const char *Function) +{ + /* poor man's breakpoints; work around 32 breakpoints kernel limit */ + if (KeGetCurrentIrql() > APC_LEVEL) + return TRUE; + ANSI_STRING Name; + RtlInitAnsiString(&Name, Function); + return FsRtlIsDbcsInExpression(&DbgBreakPointInc, &Name); +} + const char *NtStatusSym(NTSTATUS Status) { switch (Status) diff --git a/src/sys/devctrl.c b/src/sys/devctrl.c index 2f222abd..f3c741c5 100644 --- a/src/sys/devctrl.c +++ b/src/sys/devctrl.c @@ -19,7 +19,9 @@ FspDeviceControl( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/dirctrl.c b/src/sys/dirctrl.c index c0503b64..31e192d5 100644 --- a/src/sys/dirctrl.c +++ b/src/sys/dirctrl.c @@ -19,7 +19,9 @@ FspDirectoryControl( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/driver.h b/src/sys/driver.h index fb2638f3..0813e980 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -30,9 +30,11 @@ #define FSP_DEBUGLOG(rfmt, r, fmt, ...) ((void)0) #endif #if DBG +BOOLEAN HasDbgBreakPoint(const char *Function); const char *NtStatusSym(NTSTATUS Status); #define FSP_ENTER_(...) \ - try { DbgBreakPoint(); } except(EXCEPTION_EXECUTE_HANDLER) {}\ + if (HasDbgBreakPoint(__FUNCTION__)) \ + try { DbgBreakPoint(); } except(EXCEPTION_EXECUTE_HANDLER) {}\ __VA_ARGS__; \ try \ { diff --git a/src/sys/ea.c b/src/sys/ea.c index e03f6720..07379654 100644 --- a/src/sys/ea.c +++ b/src/sys/ea.c @@ -21,7 +21,9 @@ FspQueryEa( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } @@ -33,7 +35,9 @@ FspSetEa( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index 09e1fb17..0aab88b4 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -21,7 +21,9 @@ FspQueryInformation( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } @@ -33,7 +35,9 @@ FspSetInformation( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/flush.c b/src/sys/flush.c index c661864c..0233e61b 100644 --- a/src/sys/flush.c +++ b/src/sys/flush.c @@ -19,7 +19,9 @@ FspFlushBuffers( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/fsctrl.c b/src/sys/fsctrl.c index 4791ad2d..1659ecf8 100644 --- a/src/sys/fsctrl.c +++ b/src/sys/fsctrl.c @@ -19,7 +19,9 @@ FspFileSystemControl( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/lockctrl.c b/src/sys/lockctrl.c index 8ea7b091..72b43773 100644 --- a/src/sys/lockctrl.c +++ b/src/sys/lockctrl.c @@ -19,7 +19,9 @@ FspLockControl( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/read.c b/src/sys/read.c index ee79ff49..9cdf607c 100644 --- a/src/sys/read.c +++ b/src/sys/read.c @@ -19,7 +19,9 @@ FspRead( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/security.c b/src/sys/security.c index 3a0dec89..aa735319 100644 --- a/src/sys/security.c +++ b/src/sys/security.c @@ -21,7 +21,9 @@ FspQuerySecurity( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } @@ -33,7 +35,9 @@ FspSetSecurity( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/shutdown.c b/src/sys/shutdown.c index 355467b3..371ee39c 100644 --- a/src/sys/shutdown.c +++ b/src/sys/shutdown.c @@ -19,7 +19,9 @@ FspShutdown( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/volinfo.c b/src/sys/volinfo.c index a8622941..6a6b101b 100644 --- a/src/sys/volinfo.c +++ b/src/sys/volinfo.c @@ -21,7 +21,9 @@ FspQueryVolumeInformation( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } @@ -33,7 +35,9 @@ FspSetVolumeInformation( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); } diff --git a/src/sys/write.c b/src/sys/write.c index 05fe7740..567fa941 100644 --- a/src/sys/write.c +++ b/src/sys/write.c @@ -19,7 +19,9 @@ FspWrite( { FSP_ENTER(PAGED_CODE()); - Result = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + Result = STATUS_INVALID_DEVICE_REQUEST; FSP_LEAVE("", 0); }