Fix my previous patch and fix ACCESS_TOKEN being declared as a structure. This is incompatible with DDK/W32API because ACCESS_TOKEN is a PVOID. The real structure is TOKEN. Also, structure has been updated.

svn path=/trunk/; revision=12740
This commit is contained in:
Alex Ionescu 2005-01-02 23:12:40 +00:00
parent f862727d03
commit afbaa12f82
12 changed files with 122 additions and 85 deletions

View file

@ -1,4 +1,4 @@
/* $Id: objdir.c,v 1.14 2004/08/05 12:11:49 ea Exp $
/* $Id$
*
* DESCRIPTION: Object Manager Simple Explorer
* PROGRAMMER: David Welch
@ -173,8 +173,8 @@ ListDirectory (
OBJECT_ATTRIBUTES ObjectAttributes;
NTSTATUS Status;
HANDLE DirectoryHandle;
BYTE DirectoryEntry [MAX_DIR_ENTRY * sizeof(DIRECTORY_BASIC_INFORMATION)];
PDIRECTORY_BASIC_INFORMATION pDirectoryEntry = (PDIRECTORY_BASIC_INFORMATION) DirectoryEntry;
BYTE DirectoryEntry [MAX_DIR_ENTRY * sizeof(OBJECT_DIRECTORY_INFORMATION)];
POBJECT_DIRECTORY_INFORMATION pDirectoryEntry = (POBJECT_DIRECTORY_INFORMATION) DirectoryEntry;
ULONG Context = 0;
ULONG ReturnLength = 0;
ULONG EntryCount = 0;
@ -296,7 +296,7 @@ ListDirectory (
*/
if (FALSE != Recurse)
{
pDirectoryEntry = (PDIRECTORY_BASIC_INFORMATION) DirectoryEntry;
pDirectoryEntry = (POBJECT_DIRECTORY_INFORMATION) DirectoryEntry;
while (0 != pDirectoryEntry->ObjectTypeName.Length)
{
if (0 == wcscmp (L"Directory", pDirectoryEntry->ObjectTypeName.Buffer))

View file

@ -1,4 +1,4 @@
/* $Id: setypes.h,v 1.17 2004/12/22 05:06:59 royce Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory for details
* PROJECT: ReactOS kernel
@ -71,34 +71,66 @@
#define SID_REVISION (1)
#define SID_MAX_SUB_AUTHORITIES (15)
typedef struct _ACCESS_TOKEN
{
TOKEN_SOURCE TokenSource; /* 0x00 */
typedef struct _SEP_AUDIT_POLICY_CATEGORIES {
UCHAR System:4;
UCHAR Logon:4;
UCHAR ObjectAccess:4;
UCHAR PrivilegeUse:4;
UCHAR DetailedTracking:4;
UCHAR PolicyChange:4;
UCHAR AccountManagement:4;
UCHAR DirectoryServiceAccess:4;
UCHAR AccountLogon:4;
} SEP_AUDIT_POLICY_CATEGORIES, *PSEP_AUDIT_POLICY_CATEGORIES;
typedef struct _SEP_AUDIT_POLICY_OVERLAY {
ULONGLONG PolicyBits:36;
UCHAR SetBit:1;
} SEP_AUDIT_POLICY_OVERLAY, *PSEP_AUDIT_POLICY_OVERLAY;
typedef struct _SEP_AUDIT_POLICY {
union {
SEP_AUDIT_POLICY_CATEGORIES PolicyElements;
SEP_AUDIT_POLICY_OVERLAY PolicyOverlay;
ULONGLONG Overlay;
};
} SEP_AUDIT_POLICY, *PSEP_AUDIT_POLICY;
typedef struct _TOKEN {
TOKEN_SOURCE TokenSource; /* 0x00 */
LUID TokenId; /* 0x10 */
LUID AuthenticationId; /* 0x18 */
LARGE_INTEGER ExpirationTime; /* 0x20 */
LUID ModifiedId; /* 0x28 */
ULONG UserAndGroupCount; /* 0x30 */
ULONG PrivilegeCount; /* 0x34 */
ULONG VariableLength; /* 0x38 */
ULONG DynamicCharged; /* 0x3C */
ULONG DynamicAvailable; /* 0x40 */
ULONG DefaultOwnerIndex; /* 0x44 */
PSID_AND_ATTRIBUTES UserAndGroups; /* 0x48 */
PSID PrimaryGroup; /* 0x4C */
PLUID_AND_ATTRIBUTES Privileges; /* 0x50 */
ULONG Unknown1; /* 0x54 */
PACL DefaultDacl; /* 0x58 */
TOKEN_TYPE TokenType; /* 0x5C */
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x60 */
UCHAR TokenFlags; /* 0x64 */
UCHAR TokenInUse; /* 0x65 */
UCHAR Unused[2]; /* 0x66 */
PVOID ProxyData; /* 0x68 */
PVOID AuditData; /* 0x6c */
UCHAR VariablePart[1]; /* 0x70 */
} ACCESS_TOKEN, *PACCESS_TOKEN;
LUID ParentTokenId; /* 0x20 */
LARGE_INTEGER ExpirationTime; /* 0x28 */
struct _ERESOURCE *TokenLock; /* 0x30 */
ULONG Padding; /* 0x34 */
SEP_AUDIT_POLICY AuditPolicy; /* 0x38 */
LUID ModifiedId; /* 0x40 */
ULONG SessionId; /* 0x48 */
ULONG UserAndGroupCount; /* 0x4C */
ULONG RestrictedSidCount; /* 0x50 */
ULONG PrivilegeCount; /* 0x54 */
ULONG VariableLength; /* 0x58 */
ULONG DynamicCharged; /* 0x5C */
ULONG DynamicAvailable; /* 0x60 */
ULONG DefaultOwnerIndex; /* 0x64 */
PSID_AND_ATTRIBUTES UserAndGroups; /* 0x68 */
PSID_AND_ATTRIBUTES RestrictedSids; /* 0x6C */
PSID PrimaryGroup; /* 0x70 */
PLUID_AND_ATTRIBUTES Privileges; /* 0x74 */
PULONG DynamicPart; /* 0x78 */
PACL DefaultDacl; /* 0x7C */
TOKEN_TYPE TokenType; /* 0x80 */
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x84 */
ULONG TokenFlags; /* 0x88 */
ULONG TokenInUse; /* 0x8C */
PVOID ProxyData; /* 0x90 */
PVOID AuditData; /* 0x94 */
LUID OriginatingLogonSession; /* 0x98 */
UCHAR VariablePart[1]; /* 0xA0 */
} TOKEN, *PTOKEN;
typedef PVOID PACCESS_TOKEN;
typedef struct _SECURITY_SUBJECT_CONTEXT
{

View file

@ -1,4 +1,4 @@
/* $Id: dosdev.c,v 1.11 2004/01/23 21:16:03 ekohl Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
@ -156,7 +156,7 @@ QueryDosDeviceW(
DWORD ucchMax
)
{
PDIRECTORY_BASIC_INFORMATION DirInfo;
POBJECT_DIRECTORY_INFORMATION DirInfo;
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING UnicodeString;
HANDLE DirectoryHandle;
@ -252,7 +252,7 @@ QueryDosDeviceW(
RestartScan = TRUE;
Context = 0;
Ptr = lpTargetPath;
DirInfo = (PDIRECTORY_BASIC_INFORMATION)Buffer;
DirInfo = (POBJECT_DIRECTORY_INFORMATION)Buffer;
while (TRUE)
{

View file

@ -111,8 +111,8 @@ BOOLEAN SepInitDACLs(VOID);
BOOLEAN SepInitSDs(VOID);
NTSTATUS STDCALL
SepCreateImpersonationTokenDacl(PACCESS_TOKEN Token,
PACCESS_TOKEN PrimaryToken,
SepCreateImpersonationTokenDacl(PTOKEN Token,
PTOKEN PrimaryToken,
PACL *Dacl);
VOID SepInitializeTokenImplementation(VOID);
@ -142,7 +142,7 @@ SeReleaseLuidAndAttributesArray(PLUID_AND_ATTRIBUTES Privilege,
ULONG a);
BOOLEAN
SepPrivilegeCheck(PACCESS_TOKEN Token,
SepPrivilegeCheck(PTOKEN Token,
PLUID_AND_ATTRIBUTES Privileges,
ULONG PrivilegeCount,
ULONG PrivilegeControl,

View file

@ -1,4 +1,4 @@
/* $Id: create.c,v 1.89 2004/12/18 15:52:51 hbirr Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -58,7 +58,7 @@ PsAssignImpersonationToken(PETHREAD Thread,
{
return(Status);
}
ImpersonationLevel = Token->ImpersonationLevel;
ImpersonationLevel = SeTokenImpersonationLevel(Token);
}
else
{

View file

@ -1,4 +1,4 @@
/* $Id: acl.c,v 1.22 2004/12/10 16:50:37 navaraf Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -220,8 +220,8 @@ SepInitDACLs(VOID)
}
NTSTATUS STDCALL
SepCreateImpersonationTokenDacl(PACCESS_TOKEN Token,
PACCESS_TOKEN PrimaryToken,
SepCreateImpersonationTokenDacl(PTOKEN Token,
PTOKEN PrimaryToken,
PACL *Dacl)
{
ULONG AclLength;

View file

@ -1,4 +1,4 @@
/* $Id: priv.c,v 1.11 2004/08/15 16:39:11 chorns Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -98,7 +98,7 @@ SepInitPrivileges (VOID)
BOOLEAN
SepPrivilegeCheck (PACCESS_TOKEN Token,
SepPrivilegeCheck (PTOKEN Token,
PLUID_AND_ATTRIBUTES Privileges,
ULONG PrivilegeCount,
ULONG PrivilegeControl,
@ -223,7 +223,7 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
IN PBOOLEAN Result)
{
PLUID_AND_ATTRIBUTES Privilege;
PACCESS_TOKEN Token;
PTOKEN Token;
ULONG PrivilegeCount;
ULONG PrivilegeControl;
ULONG Length;

View file

@ -1,4 +1,4 @@
/* $Id: semgr.c,v 1.51 2004/11/21 18:35:05 gdalsnes Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -320,7 +320,7 @@ SeAssignSecurity(PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
POOL_TYPE PoolType)
{
PSECURITY_DESCRIPTOR Descriptor;
PACCESS_TOKEN Token;
PTOKEN Token;
ULONG OwnerLength = 0;
ULONG GroupLength = 0;
ULONG DaclLength = 0;
@ -557,10 +557,11 @@ SeAssignSecurity(PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
static BOOLEAN
SepSidInToken(PACCESS_TOKEN Token,
SepSidInToken(PACCESS_TOKEN _Token,
PSID Sid)
{
ULONG i;
PTOKEN Token = (PTOKEN)_Token;
if (Token->UserAndGroupCount == 0)
{
@ -793,7 +794,7 @@ NtAccessCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
{
SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
KPROCESSOR_MODE PreviousMode;
PACCESS_TOKEN Token;
PTOKEN Token;
NTSTATUS Status;
DPRINT("NtAccessCheck() called\n");

View file

@ -1,4 +1,4 @@
/* $Id: token.c,v 1.45 2004/12/19 16:16:58 navaraf Exp $
/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -47,10 +47,11 @@ NTSTATUS SepCopyProxyData(PVOID* Dest, PVOID Src)
}
NTSTATUS SeExchangePrimaryToken(PEPROCESS Process,
PACCESS_TOKEN NewToken,
PACCESS_TOKEN NewTokenP,
PACCESS_TOKEN* OldTokenP)
{
PACCESS_TOKEN OldToken;
PTOKEN OldToken;
PTOKEN NewToken = (PTOKEN)NewTokenP;
if (NewToken->TokenType != TokenPrimary)
{
@ -68,7 +69,7 @@ NTSTATUS SeExchangePrimaryToken(PEPROCESS Process,
SepTokenObjectType,
KernelMode);
OldToken->TokenInUse = 0;
*OldTokenP = OldToken;
*OldTokenP = (PACCESS_TOKEN)OldToken;
return(STATUS_SUCCESS);
}
@ -88,7 +89,7 @@ RtlLengthSidAndAttributes(ULONG Count,
NTSTATUS
SepFindPrimaryGroupAndDefaultOwner(PACCESS_TOKEN Token,
SepFindPrimaryGroupAndDefaultOwner(PTOKEN Token,
PSID PrimaryGroup,
PSID DefaultOwner)
{
@ -131,13 +132,13 @@ SepFindPrimaryGroupAndDefaultOwner(PACCESS_TOKEN Token,
NTSTATUS
SepDuplicateToken(PACCESS_TOKEN Token,
SepDuplicateToken(PTOKEN Token,
POBJECT_ATTRIBUTES ObjectAttributes,
BOOLEAN EffectiveOnly,
TOKEN_TYPE TokenType,
SECURITY_IMPERSONATION_LEVEL Level,
KPROCESSOR_MODE PreviousMode,
PACCESS_TOKEN* NewAccessToken)
PTOKEN* NewAccessToken)
{
NTSTATUS Status;
ULONG uLength;
@ -145,14 +146,14 @@ SepDuplicateToken(PACCESS_TOKEN Token,
PVOID EndMem;
PACCESS_TOKEN AccessToken;
PTOKEN AccessToken;
Status = ObCreateObject(PreviousMode,
SepTokenObjectType,
ObjectAttributes,
PreviousMode,
NULL,
sizeof(ACCESS_TOKEN),
sizeof(TOKEN),
0,
0,
(PVOID*)&AccessToken);
@ -266,8 +267,8 @@ SepInitializeNewProcess(struct _EPROCESS* NewProcess,
struct _EPROCESS* ParentProcess)
{
NTSTATUS Status;
PACCESS_TOKEN pNewToken;
PACCESS_TOKEN pParentToken;
PTOKEN pNewToken;
PTOKEN pParentToken;
OBJECT_ATTRIBUTES ObjectAttributes;
@ -316,6 +317,7 @@ SeCopyClientToken(PACCESS_TOKEN Token,
{
NTSTATUS Status;
OBJECT_ATTRIBUTES ObjectAttributes;
PTOKEN TokenNew;
InitializeObjectAttributes(&ObjectAttributes,
NULL,
@ -328,7 +330,9 @@ SeCopyClientToken(PACCESS_TOKEN Token,
TokenImpersonation,
Level,
PreviousMode,
NewToken);
(PTOKEN*)&NewToken);
*NewToken = (PACCESS_TOKEN)TokenNew;
return(Status);
}
@ -517,7 +521,7 @@ SeImpersonateClient(IN PSECURITY_CLIENT_CONTEXT ClientContext,
VOID STDCALL
SepDeleteToken(PVOID ObjectBody)
{
PACCESS_TOKEN AccessToken = (PACCESS_TOKEN)ObjectBody;
PTOKEN AccessToken = (PTOKEN)ObjectBody;
if (AccessToken->UserAndGroups)
ExFreePool(AccessToken->UserAndGroups);
@ -541,7 +545,7 @@ SepInitializeTokenImplementation(VOID)
SepTokenObjectType->TotalObjects = 0;
SepTokenObjectType->TotalHandles = 0;
SepTokenObjectType->PagedPoolCharge = 0;
SepTokenObjectType->NonpagedPoolCharge = sizeof(ACCESS_TOKEN);
SepTokenObjectType->NonpagedPoolCharge = sizeof(TOKEN);
SepTokenObjectType->Mapping = &SepTokenMapping;
SepTokenObjectType->Dump = NULL;
SepTokenObjectType->Open = NULL;
@ -573,7 +577,7 @@ NtQueryInformationToken(IN HANDLE TokenHandle,
NTSTATUS Status, LengthStatus;
PVOID UnusedInfo;
PVOID EndMem;
PACCESS_TOKEN Token;
PTOKEN Token;
ULONG Length;
PTOKEN_GROUPS PtrTokenGroups;
PTOKEN_DEFAULT_DACL PtrDefaultDacl;
@ -901,7 +905,7 @@ NtSetInformationToken(IN HANDLE TokenHandle,
IN ULONG TokenInformationLength)
{
NTSTATUS Status;
PACCESS_TOKEN Token;
PTOKEN Token;
TOKEN_OWNER TokenOwnerSet = { 0 };
TOKEN_PRIMARY_GROUP TokenPrimaryGroupSet = { 0 };
DWORD NeededAccess = 0;
@ -1036,8 +1040,8 @@ NtDuplicateToken(IN HANDLE ExistingTokenHandle,
OUT PHANDLE NewTokenHandle)
{
KPROCESSOR_MODE PreviousMode;
PACCESS_TOKEN Token;
PACCESS_TOKEN NewToken;
PTOKEN Token;
PTOKEN NewToken;
NTSTATUS Status;
PreviousMode = KeGetPreviousMode();
@ -1213,7 +1217,7 @@ NtAdjustPrivilegesToken (IN HANDLE TokenHandle,
// PLUID_AND_ATTRIBUTES Privileges;
KPROCESSOR_MODE PreviousMode;
// ULONG PrivilegeCount;
PACCESS_TOKEN Token;
PTOKEN Token;
// ULONG Length;
ULONG i;
ULONG j;
@ -1363,7 +1367,7 @@ SepCreateSystemProcessToken(struct _EPROCESS* Process)
ULONG uAuthUserLength = RtlLengthSid(SeAuthenticatedUserSid);
ULONG uAdminsLength = RtlLengthSid(SeAliasAdminsSid);
PACCESS_TOKEN AccessToken;
PTOKEN AccessToken;
PVOID SidArea;
@ -1375,7 +1379,7 @@ SepCreateSystemProcessToken(struct _EPROCESS* Process)
NULL,
KernelMode,
NULL,
sizeof(ACCESS_TOKEN),
sizeof(TOKEN),
0,
0,
(PVOID*)&AccessToken);
@ -1572,7 +1576,7 @@ NtCreateToken(OUT PHANDLE UnsafeTokenHandle,
IN PTOKEN_SOURCE TokenSource)
{
HANDLE TokenHandle;
PACCESS_TOKEN AccessToken;
PTOKEN AccessToken;
NTSTATUS Status;
OBJECT_ATTRIBUTES SafeObjectAttributes;
POBJECT_ATTRIBUTES ObjectAttributes;
@ -1603,7 +1607,7 @@ NtCreateToken(OUT PHANDLE UnsafeTokenHandle,
ObjectAttributes,
ExGetPreviousMode(),
NULL,
sizeof(ACCESS_TOKEN),
sizeof(TOKEN),
0,
0,
(PVOID*)&AccessToken);
@ -1744,8 +1748,7 @@ NTSTATUS STDCALL
SeQueryAuthenticationIdToken(IN PACCESS_TOKEN Token,
OUT PLUID LogonId)
{
LogonId->LowPart = Token->AuthenticationId.LowPart;
LogonId->HighPart = Token->AuthenticationId.HighPart;
*LogonId = ((PTOKEN)Token)->AuthenticationId;
return STATUS_SUCCESS;
}
@ -1754,10 +1757,11 @@ SeQueryAuthenticationIdToken(IN PACCESS_TOKEN Token,
/*
* @implemented
*/
SECURITY_IMPERSONATION_LEVEL STDCALL
SECURITY_IMPERSONATION_LEVEL
STDCALL
SeTokenImpersonationLevel(IN PACCESS_TOKEN Token)
{
return Token->ImpersonationLevel;
return ((PTOKEN)Token)->ImpersonationLevel;
}
@ -1767,7 +1771,7 @@ SeTokenImpersonationLevel(IN PACCESS_TOKEN Token)
TOKEN_TYPE STDCALL
SeTokenType(IN PACCESS_TOKEN Token)
{
return Token->TokenType;
return ((PTOKEN)Token)->TokenType;
}
@ -1823,7 +1827,7 @@ NtOpenThreadTokenEx(IN HANDLE ThreadHandle,
OUT PHANDLE TokenHandle)
{
PETHREAD Thread;
PACCESS_TOKEN Token, NewToken, PrimaryToken;
PTOKEN Token, NewToken, PrimaryToken;
BOOLEAN CopyOnOpen, EffectiveOnly;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
SE_IMPERSONATION_STATE ImpersonationState;

View file

@ -390,7 +390,7 @@ ScmCheckDriver(PSERVICE Service)
UNICODE_STRING DirName;
HANDLE DirHandle;
NTSTATUS Status;
PDIRECTORY_BASIC_INFORMATION DirInfo;
POBJECT_DIRECTORY_INFORMATION DirInfo;
ULONG BufferLength;
ULONG DataLength;
ULONG Index;
@ -424,7 +424,7 @@ ScmCheckDriver(PSERVICE Service)
return(Status);
}
BufferLength = sizeof(DIRECTORY_BASIC_INFORMATION) +
BufferLength = sizeof(OBJECT_DIRECTORY_INFORMATION) +
2 * MAX_PATH * sizeof(WCHAR);
DirInfo = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: winsta.c,v 1.70 2004/12/24 17:45:58 weiden Exp $
* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -1004,7 +1004,7 @@ BuildWindowStationNameList(
char InitialBuffer[256], *Buffer;
ULONG Context, ReturnLength, BufferSize;
DWORD EntryCount;
PDIRECTORY_BASIC_INFORMATION DirEntry;
POBJECT_DIRECTORY_INFORMATION DirEntry;
WCHAR NullWchar;
/*
@ -1090,7 +1090,7 @@ BuildWindowStationNameList(
*/
ReturnLength = sizeof(DWORD);
EntryCount = 0;
for (DirEntry = (PDIRECTORY_BASIC_INFORMATION) Buffer; 0 != DirEntry->ObjectName.Length;
for (DirEntry = (POBJECT_DIRECTORY_INFORMATION) Buffer; 0 != DirEntry->ObjectName.Length;
DirEntry++)
{
ReturnLength += DirEntry->ObjectName.Length + sizeof(WCHAR);
@ -1137,7 +1137,7 @@ BuildWindowStationNameList(
lpBuffer = (PVOID) ((PCHAR) lpBuffer + sizeof(DWORD));
NullWchar = L'\0';
for (DirEntry = (PDIRECTORY_BASIC_INFORMATION) Buffer; 0 != DirEntry->ObjectName.Length;
for (DirEntry = (POBJECT_DIRECTORY_INFORMATION) Buffer; 0 != DirEntry->ObjectName.Length;
DirEntry++)
{
Status = MmCopyToCaller(lpBuffer, DirEntry->ObjectName.Buffer, DirEntry->ObjectName.Length);

View file

@ -943,10 +943,10 @@ ZwQueryDirectoryObject(
IN OUT PULONG Context,
OUT PULONG ReturnLength OPTIONAL);
typedef struct _DIRECTORY_BASIC_INFORMATION {
typedef struct _OBJECT_DIRECTORY_INFORMATION {
UNICODE_STRING ObjectName;
UNICODE_STRING ObjectTypeName;
} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
} OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION;
NTOSAPI
NTSTATUS