AFSTraceConfigCB *pTraceInfo = (AFSTraceConfigCB *)Irp->AssociatedIrp.SystemBuffer;
+ if ( !AFSIsInGroup( SeExports->SeAliasAdminsSid))
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+ break;
+ }
+
if( pTraceInfo == NULL ||
pIrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof( AFSTraceConfigCB))
{
case IOCTL_AFS_GET_TRACE_BUFFER:
{
+ if ( !AFSIsInGroup( SeExports->SeAliasAdminsSid))
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+ break;
+ }
+
if( pIrpSp->Parameters.DeviceIoControl.OutputBufferLength == 0)
{
case IOCTL_AFS_FORCE_CRASH:
{
+ if ( !AFSIsInGroup( SeExports->SeAliasAdminsSid))
+ {
+
+ ntStatus = STATUS_ACCESS_DENIED;
+ break;
+ }
+
#if DBG
if( BooleanFlagOn( AFSDebugFlags, AFS_DBG_FLAG_ENABLE_FORCE_CRASH))
return retVal;
}
+BOOLEAN
+AFSIsInGroup(PSID Sid)
+{
+ SECURITY_SUBJECT_CONTEXT subjectContext;
+ PTOKEN_GROUPS groups;
+ PACCESS_TOKEN token;
+ BOOLEAN retVal = FALSE;
+
+ SeCaptureSubjectContext( &subjectContext );
+ SeLockSubjectContext( &subjectContext );
+
+ token = SeQuerySubjectContextToken( &subjectContext );
+
+ if (NT_SUCCESS(SeQueryInformationToken(token, TokenGroups, (PVOID*) &groups)))
+ {
+ ULONG i;
+ for (i = 0; !retVal && i < groups->GroupCount; i++)
+ {
+ retVal = RtlEqualSid(Sid, groups->Groups[i].Sid);
+ }
+
+ ExFreePool( groups );
+ }
+ SeUnlockSubjectContext( &subjectContext );
+ SeReleaseSubjectContext( &subjectContext );
+ return retVal;
+}
+
VOID
AFSRegisterService( void)
{