| |
|
|
| Hallo Profaner...
Mit der API LsaEnumerateAccountRights kann ich mir die in einem Login Profile vorhandenen Privilegien listen lassen: [quote:024a74784e] NTSTATUS LsaEnumerateAccountRights( LSA_HANDLE PolicyHandle, PSID AccountSid, PLSA_UNICODE_STRING* UserRights, PULONG CountOfRights ); Parameters PolicyHandle [in] Handle to a Policy object. The handle must have the POLICY_LOOKUP_NAMES access right. For more information, see Opening a Policy Object Handle. AccountSid [in] Pointer to the SID of the account for which to enumerate privileges. UserRights [out] Receives a pointer to an array of LSA_UNICODE_STRING structures. Each structure contains the name of a privilege held by the account. For a list of privilege names, see Privilege Constants
When you no longer need the information, pass the returned pointer to LsaFreeMemory. CountOfRights [out] Pointer to a variable that receives the number of privileges in the UserRights array. [/quote:024a74784e] Der Rest ist klar - aber was per ein Array - und wie komme ich circa den Pointer an die Elemente?? Hat jemand eine Idee? |
|
|
| |
|
|
|
Michael Dell | Hallo Andreas,
in der Beschreibung der Funktion LsaEnumerateAccountsWithUserRight steht bezüglich des zweiten Parameters: [quote:ef715ce69e]UserRights [in] Pointer to an LSA_UNICODE_STRING structure that specifies the name of a privilege. For a list of privileges, see Privilege Constants and Account Rights Constants.[/quote:ef715ce69e] Daher nehme ich an das auch die Ausgabe von LsaEnumerateAccountRights nichts anderes ist als ein Zeiger auf LSA_UNICODE_STRING.
Saluto... |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 17.12.2004 ▲ |
|
|
|
|
| Hallo Michael...
Leider nicht. Bei LsaEnumerateAccountRights ist dieses Array ein Rückgabewert der Funktion. Hier stehen die Privilegien, die ein spezieller User mit dem SID in Parameter 2 hat. Das sind in der Regel mehere Rechte => deshalb Array. Egal was ich hier einsetze, ich bekomme nur einen Long-Wert zurück und kein Array. Ich nehme mal an, das ist ein Zeiger auf einen anderen Speicherbereich - dieser Speicherbereich muß dann mit LsaFreeMemory wieder freigegeben werden, weil ihn ja mein Programm direkt nicht verwaltet. Wenn ich damit nicht ganz auf dem Holzweg bin, wie komme ich dann aber an das Array?? |
|
|
| |
|
|
|
Michael Dell | Hi nochmal,
ich fürchte da ist ein Array der LSA_UNICODE_STRING - Struktur gemeint, also ein Bereichs- Array. Das läßt sich direkt aber erst mit XProfan 9 lösen, oder mit Trick ab XProfan 8 (siehe Stefan Schnells XProfan- Aiuto). Vieleicht gehts auch vorher, leider kenn ich mich damit nicht so gut aus.
Saluto... |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 17.12.2004 ▲ |
|
|
|
|
| Hallo Michael...
Besten Dank per deinen Hinweis. Da ich nir sowieso im nächsten Jahr XProfan9 zulegen werden, werde ich die Lösung des Problems noch bis dahin verschieben. Ich nehme an, daß es dann per mich übersichtlicher und einfacher wird. |
|
|
| |
|
|
|
| Hallo Profaner...
Das Problem ist gelöst. Das Umbiegen eines Bereiches auf einen Pointer scheint bei Globalen Speicherbereichen nicht zu funktionieren. Hier hat mir die API CopyMemory weitergeholfen, damit funktionierts problemlos... |
|
|
| |
|
|