pIrpSp->FileObject->FsContext = (void *)((ULONG_PTR)pIrpSp->FileObject->FsContext | AFS_CONTROL_INSTANCE);
+ AFSRegisterService();
+
break;
}
AFSRedirectorInitInfo *pRedirInitInfo = (AFSRedirectorInitInfo *)Irp->AssociatedIrp.SystemBuffer;
+ if ( !AFSIsService())
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+
+ break;
+ }
+
//
// Extract off the passed in information which contains the
// cache file parameters
case IOCTL_AFS_PROCESS_IRP_REQUEST:
{
+ if ( !AFSIsService())
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+
+ break;
+ }
+
ntStatus = AFSProcessIrpRequest( Irp);
break;
case IOCTL_AFS_PROCESS_IRP_RESULT:
{
+ if ( !AFSIsService())
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+
+ break;
+ }
+
ntStatus = AFSProcessIrpResult( Irp);
break;
AFSSysNameNotificationCB *pSysNameInfo = (AFSSysNameNotificationCB *)Irp->AssociatedIrp.SystemBuffer;
+ if ( !AFSIsService())
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+
+ break;
+ }
+
if( pSysNameInfo == NULL ||
pIrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof( AFSSysNameNotificationCB))
{
case IOCTL_AFS_SHUTDOWN:
{
+ if ( !AFSIsService())
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+
+ break;
+ }
+
ntStatus = AFSShutdownRedirector();
break;
case IOCTL_AFS_AUTHGROUP_CREATE_AND_SET:
{
-
AFSAuthGroupRequestCB *pAuthGroupRequestCB = (AFSAuthGroupRequestCB *)Irp->AssociatedIrp.SystemBuffer;
if( pAuthGroupRequestCB == NULL ||
//
AFSReleaseResource( &pCommSrvc->ResultPoolLock);
+
}
return;
#include "AFSCommon.h"
+static HANDLE AFSServicePid = NULL;
+
void
AFSProcessNotify( IN HANDLE ParentId,
IN HANDLE ProcessId,
SeReleaseSubjectContext( &subjectContext);
return retVal;
}
+
+VOID
+AFSRegisterService( void)
+{
+ AFSServicePid = PsGetCurrentProcessId();
+}
+
+VOID
+AFSDeregisterService( void)
+{
+ AFSServicePid = NULL;
+}
+
+BOOLEAN
+AFSIsService( void)
+{
+ return PsGetCurrentProcessId() == AFSServicePid;
+}