SE_OBJECT_TYPE ObjectType, LPSTR ObjectTypeName,
LPSTR InheritedObjectTypeName, LPSTR Name )
{
+ DWORD ObjectsPresent = 0;
+
TRACE("%p %p 0x%08x %p %p %s\n", pTrustee, pObjName,
ObjectType, ObjectTypeName, InheritedObjectTypeName, debugstr_a(Name));
+ /* Fill the OBJECTS_AND_NAME structure */
+ pObjName->ObjectType = ObjectType;
+ if (ObjectTypeName != NULL)
+ {
+ ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
+ }
+
+ pObjName->InheritedObjectTypeName = InheritedObjectTypeName;
+ if (InheritedObjectTypeName != NULL)
+ {
+ ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
+ }
+
+ pObjName->ObjectsPresent = ObjectsPresent;
+ pObjName->ptstrName = Name;
+
+ /* Fill the TRUSTEE structure */
pTrustee->pMultipleTrustee = NULL;
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_NAME;
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
- pTrustee->ptstrName = Name;
+ pTrustee->ptstrName = pObjName;
}
/******************************************************************************
SE_OBJECT_TYPE ObjectType, LPWSTR ObjectTypeName,
LPWSTR InheritedObjectTypeName, LPWSTR Name )
{
+ DWORD ObjectsPresent = 0;
+
TRACE("%p %p 0x%08x %p %p %s\n", pTrustee, pObjName,
ObjectType, ObjectTypeName, InheritedObjectTypeName, debugstr_w(Name));
+ /* Fill the OBJECTS_AND_NAME structure */
+ pObjName->ObjectType = ObjectType;
+ if (ObjectTypeName != NULL)
+ {
+ ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
+ }
+
+ pObjName->InheritedObjectTypeName = InheritedObjectTypeName;
+ if (InheritedObjectTypeName != NULL)
+ {
+ ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
+ }
+
+ pObjName->ObjectsPresent = ObjectsPresent;
+ pObjName->ptstrName = Name;
+
+ /* Fill the TRUSTEE structure */
pTrustee->pMultipleTrustee = NULL;
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_NAME;
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
- pTrustee->ptstrName = Name;
+ pTrustee->ptstrName = (LPWSTR)pObjName;
}
VOID WINAPI BuildTrusteeWithObjectsAndSidA( PTRUSTEEA pTrustee, POBJECTS_AND_SID pObjSid,
GUID* pObjectGuid, GUID* pInheritedObjectGuid, PSID pSid )
{
+ DWORD ObjectsPresent = 0;
+
TRACE("%p %p %p %p %p\n", pTrustee, pObjSid, pObjectGuid, pInheritedObjectGuid, pSid);
+ /* Fill the OBJECTS_AND_SID structure */
+ if (pObjectGuid != NULL)
+ {
+ pObjSid->ObjectTypeGuid = *pObjectGuid;
+ ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
+ }
+ else
+ {
+ ZeroMemory(&pObjSid->ObjectTypeGuid,
+ sizeof(GUID));
+ }
+
+ if (pInheritedObjectGuid != NULL)
+ {
+ pObjSid->InheritedObjectTypeGuid = *pInheritedObjectGuid;
+ ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
+ }
+ else
+ {
+ ZeroMemory(&pObjSid->InheritedObjectTypeGuid,
+ sizeof(GUID));
+ }
+
+ pObjSid->ObjectsPresent = ObjectsPresent;
+ pObjSid->pSid = pSid;
+
+ /* Fill the TRUSTEE structure */
pTrustee->pMultipleTrustee = NULL;
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
- pTrustee->ptstrName = (LPSTR) pSid;
+ pTrustee->ptstrName = (LPSTR) pObjSid;
}
VOID WINAPI BuildTrusteeWithObjectsAndSidW( PTRUSTEEW pTrustee, POBJECTS_AND_SID pObjSid,
GUID* pObjectGuid, GUID* pInheritedObjectGuid, PSID pSid )
{
+ DWORD ObjectsPresent = 0;
+
TRACE("%p %p %p %p %p\n", pTrustee, pObjSid, pObjectGuid, pInheritedObjectGuid, pSid);
+ /* Fill the OBJECTS_AND_SID structure */
+ if (pObjectGuid != NULL)
+ {
+ pObjSid->ObjectTypeGuid = *pObjectGuid;
+ ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
+ }
+ else
+ {
+ ZeroMemory(&pObjSid->ObjectTypeGuid,
+ sizeof(GUID));
+ }
+
+ if (pInheritedObjectGuid != NULL)
+ {
+ pObjSid->InheritedObjectTypeGuid = *pInheritedObjectGuid;
+ ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
+ }
+ else
+ {
+ ZeroMemory(&pObjSid->InheritedObjectTypeGuid,
+ sizeof(GUID));
+ }
+
+ pObjSid->ObjectsPresent = ObjectsPresent;
+ pObjSid->pSid = pSid;
+
+ /* Fill the TRUSTEE structure */
pTrustee->pMultipleTrustee = NULL;
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
- pTrustee->ptstrName = (LPWSTR) pSid;
+ pTrustee->ptstrName = (LPWSTR) pObjSid;
}
/******************************************************************************
#include "aclapi.h"
#include "winnt.h"
-typedef BOOL (WINAPI *fnBuildTrusteeWithSidA)( TRUSTEE *trustee, PSID psid );
-typedef BOOL (WINAPI *fnBuildTrusteeWithNameA)( TRUSTEE *trustee, LPSTR str );
+typedef VOID (WINAPI *fnBuildTrusteeWithSidA)( PTRUSTEEA pTrustee, PSID pSid );
+typedef VOID (WINAPI *fnBuildTrusteeWithNameA)( PTRUSTEEA pTrustee, LPSTR pName );
+typedef VOID (WINAPI *fnBuildTrusteeWithObjectsAndNameA)( PTRUSTEEA pTrustee,
+ POBJECTS_AND_NAME_A pObjName,
+ SE_OBJECT_TYPE ObjectType,
+ LPSTR ObjectTypeName,
+ LPSTR InheritedObjectTypeName,
+ LPSTR Name );
+typedef VOID (WINAPI *fnBuildTrusteeWithObjectsAndSidA)( PTRUSTEEA pTrustee,
+ POBJECTS_AND_SID pObjSid,
+ GUID* pObjectGuid,
+ GUID* pInheritedObjectGuid,
+ PSID pSid );
+typedef LPSTR (WINAPI *fnGetTrusteeNameA)( PTRUSTEEA pTrustee );
typedef BOOL (WINAPI *fnConvertSidToStringSidA)( PSID pSid, LPSTR *str );
typedef BOOL (WINAPI *fnConvertStringSidToSidA)( LPCSTR str, PSID pSid );
typedef BOOL (WINAPI *fnGetFileSecurityA)(LPCSTR, SECURITY_INFORMATION,
fnBuildTrusteeWithSidA pBuildTrusteeWithSidA;
fnBuildTrusteeWithNameA pBuildTrusteeWithNameA;
+fnBuildTrusteeWithObjectsAndNameA pBuildTrusteeWithObjectsAndNameA;
+fnBuildTrusteeWithObjectsAndSidA pBuildTrusteeWithObjectsAndSidA;
+fnGetTrusteeNameA pGetTrusteeNameA;
fnConvertSidToStringSidA pConvertSidToStringSidA;
fnConvertStringSidToSidA pConvertStringSidToSidA;
fnGetFileSecurityA pGetFileSecurityA;
static void test_trustee(void)
{
+ GUID ObjectType = {0x12345678, 0x1234, 0x5678, {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}};
+ GUID InheritedObjectType = {0x23456789, 0x2345, 0x6786, {0x2, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}};
+ GUID ZeroGuid;
+ OBJECTS_AND_NAME_ oan;
+ OBJECTS_AND_SID oas;
TRUSTEE trustee;
PSID psid;
- char str[] = "2jjj";
+ char szObjectTypeName[] = "ObjectTypeName";
+ char szInheritedObjectTypeName[] = "InheritedObjectTypeName";
+ char szTrusteeName[] = "szTrusteeName";
+
+ memset( &ZeroGuid, 0x00, sizeof (ZeroGuid) );
SID_IDENTIFIER_AUTHORITY auth = { {0x11,0x22,0,0,0, 0} };
GetProcAddress( hmod, "BuildTrusteeWithSidA" );
pBuildTrusteeWithNameA = (fnBuildTrusteeWithNameA)
GetProcAddress( hmod, "BuildTrusteeWithNameA" );
- if( !pBuildTrusteeWithSidA || !pBuildTrusteeWithNameA)
+ pBuildTrusteeWithObjectsAndNameA = (fnBuildTrusteeWithObjectsAndNameA)
+ GetProcAddress (hmod, "BuildTrusteeWithObjectsAndNameA" );
+ pBuildTrusteeWithObjectsAndSidA = (fnBuildTrusteeWithObjectsAndSidA)
+ GetProcAddress (hmod, "BuildTrusteeWithObjectsAndSidA" );
+ pGetTrusteeNameA = (fnGetTrusteeNameA)
+ GetProcAddress (hmod, "GetTrusteeNameA" );
+ if( !pBuildTrusteeWithSidA || !pBuildTrusteeWithNameA ||
+ !pBuildTrusteeWithObjectsAndNameA || !pBuildTrusteeWithObjectsAndSidA ||
+ !pGetTrusteeNameA )
return;
if ( ! AllocateAndInitializeSid( &auth, 1, 42, 0,0,0,0,0,0,0,&psid ) )
return;
}
+ /* test BuildTrusteeWithSidA */
memset( &trustee, 0xff, sizeof trustee );
pBuildTrusteeWithSidA( &trustee, psid );
ok( trustee.TrusteeForm == TRUSTEE_IS_SID, "TrusteeForm wrong\n");
ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
ok( trustee.ptstrName == (LPSTR) psid, "ptstrName wrong\n" );
+
+ /* test BuildTrusteeWithObjectsAndSidA (test 1) */
+ memset( &trustee, 0xff, sizeof trustee );
+ memset( &oas, 0xff, sizeof(oas) );
+ pBuildTrusteeWithObjectsAndSidA(&trustee, &oas, &ObjectType,
+ &InheritedObjectType, psid);
+
+ ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
+ ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
+ ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_SID, "TrusteeForm wrong\n");
+ ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
+ ok(trustee.ptstrName == (LPSTR)&oas, "ptstrName wrong\n");
+
+ ok(oas.ObjectsPresent == (ACE_OBJECT_TYPE_PRESENT | ACE_INHERITED_OBJECT_TYPE_PRESENT), "ObjectsPresent wrong\n");
+ ok(!memcmp(&oas.ObjectTypeGuid, &ObjectType, sizeof(GUID)), "ObjectTypeGuid wrong\n");
+ ok(!memcmp(&oas.InheritedObjectTypeGuid, &InheritedObjectType, sizeof(GUID)), "InheritedObjectTypeGuid wrong\n");
+ ok(oas.pSid == psid, "pSid wrong\n");
+
+ /* test GetTrusteeNameA */
+ ok(pGetTrusteeNameA(&trustee) == (LPSTR)&oas, "GetTrusteeName returned wrong value\n");
+
+ /* test BuildTrusteeWithObjectsAndSidA (test 2) */
+ memset( &trustee, 0xff, sizeof trustee );
+ memset( &oas, 0xff, sizeof(oas) );
+ pBuildTrusteeWithObjectsAndSidA(&trustee, &oas, NULL,
+ &InheritedObjectType, psid);
+
+ ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
+ ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
+ ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_SID, "TrusteeForm wrong\n");
+ ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
+ ok(trustee.ptstrName == (LPSTR)&oas, "ptstrName wrong\n");
+
+ ok(oas.ObjectsPresent == ACE_INHERITED_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n");
+ ok(!memcmp(&oas.ObjectTypeGuid, &ZeroGuid, sizeof(GUID)), "ObjectTypeGuid wrong\n");
+ ok(!memcmp(&oas.InheritedObjectTypeGuid, &InheritedObjectType, sizeof(GUID)), "InheritedObjectTypeGuid wrong\n");
+ ok(oas.pSid == psid, "pSid wrong\n");
+
FreeSid( psid );
/* test BuildTrusteeWithNameA */
memset( &trustee, 0xff, sizeof trustee );
- pBuildTrusteeWithNameA( &trustee, str );
+ pBuildTrusteeWithNameA( &trustee, szTrusteeName );
ok( trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
ok( trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE,
"MultipleTrusteeOperation wrong\n");
ok( trustee.TrusteeForm == TRUSTEE_IS_NAME, "TrusteeForm wrong\n");
ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
- ok( trustee.ptstrName == str, "ptstrName wrong\n" );
+ ok( trustee.ptstrName == szTrusteeName, "ptstrName wrong\n" );
+
+ /* test BuildTrusteeWithObjectsAndNameA (test 1) */
+ memset( &trustee, 0xff, sizeof trustee );
+ memset( &oan, 0xff, sizeof(oan) );
+ pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, szObjectTypeName,
+ szInheritedObjectTypeName, szTrusteeName);
+
+ ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
+ ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
+ ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n");
+ ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
+ ok(trustee.ptstrName == (LPTSTR)&oan, "ptstrName wrong\n");
+
+ ok(oan.ObjectsPresent == (ACE_OBJECT_TYPE_PRESENT | ACE_INHERITED_OBJECT_TYPE_PRESENT), "ObjectsPresent wrong\n");
+ ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n");
+ ok(oan.InheritedObjectTypeName == szInheritedObjectTypeName, "InheritedObjectTypeName wrong\n");
+ ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n");
+
+ /* test GetTrusteeNameA */
+ ok(pGetTrusteeNameA(&trustee) == (LPSTR)&oan, "GetTrusteeName returned wrong value\n");
+
+ /* test BuildTrusteeWithObjectsAndNameA (test 2) */
+ memset( &trustee, 0xff, sizeof trustee );
+ memset( &oan, 0xff, sizeof(oan) );
+ pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, NULL,
+ szInheritedObjectTypeName, szTrusteeName);
+
+ ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
+ ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
+ ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n");
+ ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
+ ok(trustee.ptstrName == (LPSTR)&oan, "ptstrName wrong\n");
+
+ ok(oan.ObjectsPresent == ACE_INHERITED_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n");
+ ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n");
+ ok(oan.InheritedObjectTypeName == szInheritedObjectTypeName, "InheritedObjectTypeName wrong\n");
+ ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n");
+
+ /* test BuildTrusteeWithObjectsAndNameA (test 3) */
+ memset( &trustee, 0xff, sizeof trustee );
+ memset( &oan, 0xff, sizeof(oan) );
+ pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, szObjectTypeName,
+ NULL, szTrusteeName);
+
+ ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
+ ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
+ ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n");
+ ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
+ ok(trustee.ptstrName == (LPTSTR)&oan, "ptstrName wrong\n");
+
+ ok(oan.ObjectsPresent == ACE_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n");
+ ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n");
+ ok(oan.InheritedObjectTypeName == NULL, "InheritedObjectTypeName wrong\n");
+ ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n");
}
/* If the first isn't defined, assume none is */