From 4001162745e4dfd22e73f2046799032dba99ae4c Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Thu, 11 Aug 2016 18:31:44 +0200 Subject: [PATCH 01/25] added GetSecurityInfo --- lib/advapi32/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 3c4a5221b..e44391b10 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -441,7 +441,11 @@ extern "system" { // pub fn GetSecurityDescriptorOwner(); // pub fn GetSecurityDescriptorRMControl(); // pub fn GetSecurityDescriptorSacl(); - // pub fn GetSecurityInfo(); + pub fn GetSecurityInfo( + handle: HANDLE, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, + ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, + ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, + ) -> BOOL; // pub fn GetSecurityInfoExA(); // pub fn GetSecurityInfoExW(); // pub fn GetServiceDisplayNameA(); From f629c8c770f9f68f4150301dd347369cdebd3788 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Fri, 12 Aug 2016 09:53:46 +0200 Subject: [PATCH 02/25] added advapi32.rs --- src/advapi32.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/advapi32.rs diff --git a/src/advapi32.rs b/src/advapi32.rs new file mode 100644 index 000000000..88b0172dd --- /dev/null +++ b/src/advapi32.rs @@ -0,0 +1,15 @@ +ENUM!{enum SE_OBJECT_TYPE { + SE_UNKNOWN_OBJECT_TYPE = 0, + SE_FILE_OBJECT, + SE_SERVICE, + SE_PRINTER, + SE_REGISTRY_KEY, + SE_LMSHARE, + SE_KERNEL_OBJECT, + SE_WINDOW_OBJECT, + SE_DS_OBJECT, + SE_DS_OBJECT_ALL, + SE_PROVIDER_DEFINED_OBJECT, + SE_WMIGUID_OBJECT, + SE_REGISTRY_WOW64_32KEY +}} \ No newline at end of file From a3876c56fb71f15739971eaca21c116b52773252 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Fri, 12 Aug 2016 17:17:44 +0200 Subject: [PATCH 03/25] working --- tests/advapi32.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/advapi32.rs b/tests/advapi32.rs index be2db0b26..5563d33b1 100644 --- a/tests/advapi32.rs +++ b/tests/advapi32.rs @@ -92,4 +92,5 @@ fn functions() { bb(SetServiceStatus); bb(StartServiceCtrlDispatcherA); bb(StartServiceCtrlDispatcherW); + bb(GetSecurityInfo); } From 78278cb6378bb3c3e5cd7f29b89600ea97d57bcb Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Sat, 13 Aug 2016 09:26:24 +0200 Subject: [PATCH 04/25] moving SE_OBJECT_TYPE to accctrl.rs --- src/{advapi32.rs => accctrl.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{advapi32.rs => accctrl.rs} (100%) diff --git a/src/advapi32.rs b/src/accctrl.rs similarity index 100% rename from src/advapi32.rs rename to src/accctrl.rs From 29aa2756e5a79152f8fc0ec274c6ffcdcc01a20d Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Sat, 13 Aug 2016 10:22:32 +0200 Subject: [PATCH 05/25] added pub mod acctrl to /src/lib.rs --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 0e99f815a..507a88c6c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -189,6 +189,7 @@ pub use xinput::*; // Modules //------------------------------------------------------------------------------------------------- #[macro_use] mod macros; +pub mod accctrl; pub mod activation; pub mod audioclient; pub mod audiosessiontypes; From 111cb4b1a2a617fd69716d82164fd10b2a5a1a9d Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Sat, 13 Aug 2016 10:24:15 +0200 Subject: [PATCH 06/25] added pub use acctrl to /src/lib.rs --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 507a88c6c..21053ece4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,6 +24,7 @@ pub use std::os::raw::{ c_float, c_double, }; +pub use accctrl::*; pub use activation::*; pub use audioclient::*; pub use audiosessiontypes::*; From 4a05769bad748194a6544d3631187c964207442c Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Sat, 13 Aug 2016 10:37:09 +0200 Subject: [PATCH 07/25] added missing comma --- src/accctrl.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/accctrl.rs b/src/accctrl.rs index 88b0172dd..8f1513c8b 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -11,5 +11,5 @@ ENUM!{enum SE_OBJECT_TYPE { SE_DS_OBJECT_ALL, SE_PROVIDER_DEFINED_OBJECT, SE_WMIGUID_OBJECT, - SE_REGISTRY_WOW64_32KEY + SE_REGISTRY_WOW64_32KEY, }} \ No newline at end of file From 5920f6433eae3b5278a2a4663094bb457709cc82 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Tue, 16 Aug 2016 16:40:09 +0200 Subject: [PATCH 08/25] Update lib.rs Fixed return value of GetSecurityInfo --- lib/advapi32/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index e44391b10..6392e8da3 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -445,7 +445,7 @@ extern "system" { handle: HANDLE, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, - ) -> BOOL; + ) -> DWORD; // pub fn GetSecurityInfoExA(); // pub fn GetSecurityInfoExW(); // pub fn GetServiceDisplayNameA(); From bc393be849c8c83717ce83ce02d240a3aedeb3a9 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Wed, 17 Aug 2016 10:37:31 +0200 Subject: [PATCH 09/25] corrected SE_OBJECT_TYPE --- src/accctrl.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/accctrl.rs b/src/accctrl.rs index 8f1513c8b..87122a866 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -12,4 +12,5 @@ ENUM!{enum SE_OBJECT_TYPE { SE_PROVIDER_DEFINED_OBJECT, SE_WMIGUID_OBJECT, SE_REGISTRY_WOW64_32KEY, + SE_REGISTRY_WOW64_64KEY, }} \ No newline at end of file From f5c301aa8c833b9822e60b96a36e235fa041d4f0 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Wed, 17 Aug 2016 18:47:27 +0200 Subject: [PATCH 10/25] added GetNamedSecurityInfoA and GetNamedSecurityInfoW --- lib/advapi32/src/lib.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 6392e8da3..a2c4e9dc5 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -426,10 +426,18 @@ extern "system" { // pub fn GetMultipleTrusteeOperationA(); // pub fn GetMultipleTrusteeOperationW(); // pub fn GetMultipleTrusteeW(); - // pub fn GetNamedSecurityInfoA(); + pub fn GetNamedSecurityInfoA( + pObjectName: LPCSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, + ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, + ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, + ) -> DWORD; // pub fn GetNamedSecurityInfoExA(); // pub fn GetNamedSecurityInfoExW(); - // pub fn GetNamedSecurityInfoW(); + pub fn GetNamedSecurityInfoW( + pObjectName: LPCWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, + ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, + ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, + ) -> DWORD; // pub fn GetNumberOfEventLogRecords(); // pub fn GetOldestEventLogRecord(); // pub fn GetOverlappedAccessResults(); From fd5a105c9f54203813e5ffdbde7f5a0211fedbb1 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Thu, 18 Aug 2016 11:09:36 +0200 Subject: [PATCH 11/25] added LookupAccountNameA and LookupAccountNameW --- lib/advapi32/src/lib.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index a2c4e9dc5..080291355 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -510,8 +510,14 @@ extern "system" { // pub fn LogonUserExExW(); // pub fn LogonUserExW(); // pub fn LogonUserW(); - // pub fn LookupAccountNameA(); - // pub fn LookupAccountNameW(); + pub fn LookupAccountNameA( + lpSystemName: LPCSTR, lpAccountName: LPCSTR, Sid PSID, cbSid: LPDWORD, + ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE + ) -> BOOL; + pub fn LookupAccountNameW( + lpSystemName: LPCWSTR, lpAccountName: LPCWSTR, Sid PSID, cbSid: LPDWORD, + ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE + ) -> BOOL; // pub fn LookupAccountSidA(); // pub fn LookupAccountSidW(); // pub fn LookupPrivilegeDisplayNameA(); From 3b3a51d21443a5b3e9bc2b8a4a3a68d16042514b Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Thu, 18 Aug 2016 11:20:55 +0200 Subject: [PATCH 12/25] minor bugfix --- lib/advapi32/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 080291355..94f4aece7 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -511,11 +511,11 @@ extern "system" { // pub fn LogonUserExW(); // pub fn LogonUserW(); pub fn LookupAccountNameA( - lpSystemName: LPCSTR, lpAccountName: LPCSTR, Sid PSID, cbSid: LPDWORD, + lpSystemName: LPCSTR, lpAccountName: LPCSTR, Sid: PSID, cbSid: LPDWORD, ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE ) -> BOOL; pub fn LookupAccountNameW( - lpSystemName: LPCWSTR, lpAccountName: LPCWSTR, Sid PSID, cbSid: LPDWORD, + lpSystemName: LPCWSTR, lpAccountName: LPCWSTR, Sid: PSID, cbSid: LPDWORD, ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE ) -> BOOL; // pub fn LookupAccountSidA(); From 60ebf6d41784b0260fe00a7ef53d6a94e777b07e Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Thu, 18 Aug 2016 11:34:56 +0200 Subject: [PATCH 13/25] added LookupAccountSidW and LookupAccountSidA --- lib/advapi32/src/lib.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 94f4aece7..a71ac612a 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -512,14 +512,22 @@ extern "system" { // pub fn LogonUserW(); pub fn LookupAccountNameA( lpSystemName: LPCSTR, lpAccountName: LPCSTR, Sid: PSID, cbSid: LPDWORD, - ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE + ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, ) -> BOOL; pub fn LookupAccountNameW( lpSystemName: LPCWSTR, lpAccountName: LPCWSTR, Sid: PSID, cbSid: LPDWORD, - ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE + ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, + ) -> BOOL; + pub fn LookupAccountSidA( + lpSystemName: LPCWSTR, Sid: PSID, Name: LPSTR, cchName: LPDWORD, + ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, + peUse: PSID_NAME_USE, + ) -> BOOL; + pub fn LookupAccountSidW( + lpSystemName: LPCWSTR, Sid: PSID, Name: LPCWSTR, cchName: LPDWORD, + ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, + peUse: PSID_NAME_USE, ) -> BOOL; - // pub fn LookupAccountSidA(); - // pub fn LookupAccountSidW(); // pub fn LookupPrivilegeDisplayNameA(); // pub fn LookupPrivilegeDisplayNameW(); pub fn LookupPrivilegeNameA( From fa069a93ee75f6ced6e856d314b961c565e7dc26 Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Thu, 18 Aug 2016 11:38:45 +0200 Subject: [PATCH 14/25] added LookupPrivilegeDisplayNameA and LookupPrivilegeDisplayNameW --- lib/advapi32/src/lib.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index a71ac612a..f2269903b 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -528,8 +528,14 @@ extern "system" { ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, ) -> BOOL; - // pub fn LookupPrivilegeDisplayNameA(); - // pub fn LookupPrivilegeDisplayNameW(); + pub fn LookupPrivilegeDisplayNameA( + lpSystemName: LPCSTR, lpName: LPCSTR, lpDisplayName: LPSTR, cchDisplayName: LPDWORD, + lpLanguageId: LPDWORD, + ) -> BOOL; + pub fn LookupPrivilegeDisplayNameW( + lpSystemName: LPCWSTR, lpName: LPCWSTR, lpDisplayName: LPWSTR, cchDisplayName: LPDWORD, + lpLanguageId: LPDWORD, + ) -> BOOL; pub fn LookupPrivilegeNameA( lpSystemName: LPCSTR, lpLuid: PLUID, lpName: LPSTR, cchName: LPDWORD, ) -> BOOL; From 887100efaf620721502e243c0096565478ded559 Mon Sep 17 00:00:00 2001 From: tekampe Date: Tue, 30 Aug 2016 19:46:17 +0200 Subject: [PATCH 15/25] Added first version of SetEntriesInAclA and SetEntriesInAclW (still not working) --- lib/advapi32/src/lib.rs | 26 +++++---- src/accctrl.rs | 125 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 139 insertions(+), 12 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index f2269903b..a8ba7c7e5 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -428,14 +428,14 @@ extern "system" { // pub fn GetMultipleTrusteeW(); pub fn GetNamedSecurityInfoA( pObjectName: LPCSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, - ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, + ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; // pub fn GetNamedSecurityInfoExA(); // pub fn GetNamedSecurityInfoExW(); pub fn GetNamedSecurityInfoW( pObjectName: LPCWSTR, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, - ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, + ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; // pub fn GetNumberOfEventLogRecords(); @@ -451,7 +451,7 @@ extern "system" { // pub fn GetSecurityDescriptorSacl(); pub fn GetSecurityInfo( handle: HANDLE, ObjectType: SE_OBJECT_TYPE, SecurityInfo: SECURITY_INFORMATION, - ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, + ppsidOwner: *mut PSID, ppsidGroup: *mut PSID, ppDacl: *mut PACL, ppSacl: *mut PACL, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> DWORD; // pub fn GetSecurityInfoExA(); @@ -511,21 +511,21 @@ extern "system" { // pub fn LogonUserExW(); // pub fn LogonUserW(); pub fn LookupAccountNameA( - lpSystemName: LPCSTR, lpAccountName: LPCSTR, Sid: PSID, cbSid: LPDWORD, + lpSystemName: LPCSTR, lpAccountName: LPCSTR, Sid: PSID, cbSid: LPDWORD, ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, ) -> BOOL; pub fn LookupAccountNameW( - lpSystemName: LPCWSTR, lpAccountName: LPCWSTR, Sid: PSID, cbSid: LPDWORD, + lpSystemName: LPCWSTR, lpAccountName: LPCWSTR, Sid: PSID, cbSid: LPDWORD, ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, ) -> BOOL; pub fn LookupAccountSidA( - lpSystemName: LPCWSTR, Sid: PSID, Name: LPSTR, cchName: LPDWORD, - ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, + lpSystemName: LPCWSTR, Sid: PSID, Name: LPSTR, cchName: LPDWORD, + ReferencedDomainName: LPSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, ) -> BOOL; pub fn LookupAccountSidW( - lpSystemName: LPCWSTR, Sid: PSID, Name: LPCWSTR, cchName: LPDWORD, - ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, + lpSystemName: LPCWSTR, Sid: PSID, Name: LPCWSTR, cchName: LPDWORD, + ReferencedDomainName: LPCWSTR, cchReferencedDomainName: LPDWORD, peUse: PSID_NAME_USE, ) -> BOOL; pub fn LookupPrivilegeDisplayNameA( @@ -933,8 +933,12 @@ extern "system" { // pub fn SetEncryptedFileMetadata(); // pub fn SetEntriesInAccessListA(); // pub fn SetEntriesInAccessListW(); - // pub fn SetEntriesInAclA(); - // pub fn SetEntriesInAclW(); + pub fn SetEntriesInAclA(cCountOfExplicitEntries: ULONG, + pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: PACL, + ) -> DWORD; + pub fn SetEntriesInAclW(cCountOfExplicitEntries: ULONG, + pListOfExplicitEntries: PEXPLICIT_ACCESS_W, OldAcl: PACL, NewAcl: PACL, + ) -> DWORD; // pub fn SetEntriesInAuditListA(); // pub fn SetEntriesInAuditListW(); // pub fn SetFileSecurityA(); diff --git a/src/accctrl.rs b/src/accctrl.rs index 87122a866..177e2e97e 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -13,4 +13,127 @@ ENUM!{enum SE_OBJECT_TYPE { SE_WMIGUID_OBJECT, SE_REGISTRY_WOW64_32KEY, SE_REGISTRY_WOW64_64KEY, -}} \ No newline at end of file +}} + +ENUM!{enum ACCESS_MODE { + NOT_USED_ACCESS = 0, + GRANT_ACCESS, + SET_ACCESS, + DENY_ACCESS, + REVOKE_ACCESS, + SET_AUDIT_SUCCESS, + SET_AUDIT_FAILURE, +}} + +STRUCT!{struct PEXPLICIT_ACCESS_A { + grfAccessPermissions: DWORD, + grfAccessMode: ::ACCESS_MODE, + grfInheritance: DWORD, + Trustee: TRUSTEE_A , +}} + +pub type _EXPLICIT_ACCESS_A= PEXPLICIT_ACCESS_A; +pub type *PEXPLICIT_ACCESS_A = PEXPLICIT_ACCESS_A; +pub type EXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; +pub type *PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; + + + +// typedef struct _TRUSTEE_A +// { +// struct _TRUSTEE_A *pMultipleTrustee; +// MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; +// TRUSTEE_FORM TrusteeForm; +// TRUSTEE_TYPE TrusteeType; +// #ifdef __midl +// [switch_is(TrusteeForm)] +// union +// { +// [case(TRUSTEE_IS_NAME)] +// LPSTR ptstrName; +// [case(TRUSTEE_IS_SID)] +// SID *pSid; +// [case(TRUSTEE_IS_OBJECTS_AND_SID)] +// OBJECTS_AND_SID *pObjectsAndSid; +// [case(TRUSTEE_IS_OBJECTS_AND_NAME)] +// OBJECTS_AND_NAME_A *pObjectsAndName; +// }; +// #else +// LPSTR ptstrName; +// #endif +// } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA; +// typedef struct _TRUSTEE_W +// { +// struct _TRUSTEE_W *pMultipleTrustee; +// MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; +// TRUSTEE_FORM TrusteeForm; +// TRUSTEE_TYPE TrusteeType; +// #ifdef __midl +// [switch_is(TrusteeForm)] +// union +// { +// [case(TRUSTEE_IS_NAME)] +// LPWSTR ptstrName; +// [case(TRUSTEE_IS_SID)] +// SID *pSid; +// [case(TRUSTEE_IS_OBJECTS_AND_SID)] +// OBJECTS_AND_SID *pObjectsAndSid; +// [case(TRUSTEE_IS_OBJECTS_AND_NAME)] +// OBJECTS_AND_NAME_W *pObjectsAndName; +// }; +// #else +// LPWSTR ptstrName; +// #endif +// } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW; +// #ifdef UNICODE +// typedef TRUSTEE_W TRUSTEE_; +// typedef PTRUSTEE_W PTRUSTEE_; +// typedef TRUSTEEW TRUSTEE; +// typedef PTRUSTEEW PTRUSTEE; +// #else +// typedef TRUSTEE_A TRUSTEE_; +// typedef PTRUSTEE_A PTRUSTEE_; +// typedef TRUSTEEA TRUSTEE; +// typedef PTRUSTEEA PTRUSTEE; +// #endif // UNICODE + +// +// Definition: EXPLICIT_ACCESS +// This structure is used to pass access control entry information into and out +// of the system using the API defined in this document. +// grfAccessPermissions - This contains the access permissions to assign for the +// trustee. It is in the form of an NT access mask. +// grfAccessMode - This field defines how the permissions are to be applied for +// the trustee. +// grfInheritance - For containers, this field defines how the access control +// entry is/(is requested) to be inherited on +// objects/sub-containers created within the container. +// Trustee - This field contains the definition of the trustee account the +// explicit access applies to. +// + +// typedef struct _EXPLICIT_ACCESS_A +// { +// DWORD grfAccessPermissions; +// ACCESS_MODE grfAccessMode; +// DWORD grfInheritance; +// TRUSTEE_A Trustee; +// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; +// typedef struct _EXPLICIT_ACCESS_W +// { +// DWORD grfAccessPermissions; +// ACCESS_MODE grfAccessMode; +// DWORD grfInheritance; +// TRUSTEE_W Trustee; +// } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; +// #ifdef UNICODE +// typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_; +// typedef PEXPLICIT_ACCESS_W PEXPLICIT_ACCESS_; +// typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS; +// typedef PEXPLICIT_ACCESSW PEXPLICIT_ACCESS; +// #else +// typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_; +// typedef PEXPLICIT_ACCESS_A PEXPLICIT_ACCESS_; +// typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS; +// typedef PEXPLICIT_ACCESSA PEXPLICIT_ACCESS; +// #endif // UNICODE From 9d2b947777ce863fce7ba4e18e12b4bcedc26870 Mon Sep 17 00:00:00 2001 From: tekampe Date: Wed, 31 Aug 2016 17:04:11 +0200 Subject: [PATCH 16/25] working --- lib/advapi32/src/lib.rs | 13 +++++++------ src/accctrl.rs | 9 ++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index a8ba7c7e5..629c8b7ae 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -933,12 +933,13 @@ extern "system" { // pub fn SetEncryptedFileMetadata(); // pub fn SetEntriesInAccessListA(); // pub fn SetEntriesInAccessListW(); - pub fn SetEntriesInAclA(cCountOfExplicitEntries: ULONG, - pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: PACL, - ) -> DWORD; - pub fn SetEntriesInAclW(cCountOfExplicitEntries: ULONG, - pListOfExplicitEntries: PEXPLICIT_ACCESS_W, OldAcl: PACL, NewAcl: PACL, - ) -> DWORD; +//Todo + // pub fn SetEntriesInAclA(cCountOfExplicitEntries: ULONG, + // pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: PACL, + // ) -> DWORD; + // pub fn SetEntriesInAclW(cCountOfExplicitEntries: ULONG, + // pListOfExplicitEntries: PEXPLICIT_ACCESS_W, OldAcl: PACL, NewAcl: PACL, + // ) -> DWORD; // pub fn SetEntriesInAuditListA(); // pub fn SetEntriesInAuditListW(); // pub fn SetFileSecurityA(); diff --git a/src/accctrl.rs b/src/accctrl.rs index 177e2e97e..5029d89c4 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -32,11 +32,10 @@ STRUCT!{struct PEXPLICIT_ACCESS_A { Trustee: TRUSTEE_A , }} -pub type _EXPLICIT_ACCESS_A= PEXPLICIT_ACCESS_A; -pub type *PEXPLICIT_ACCESS_A = PEXPLICIT_ACCESS_A; -pub type EXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; -pub type *PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; - +// pub type _EXPLICIT_ACCESS_A= PEXPLICIT_ACCESS_A; +// pub type *PEXPLICIT_ACCESS_A = PEXPLICIT_ACCESS_A; +// pub type EXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; +// pub type *PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; // typedef struct _TRUSTEE_A From 6f78a6acf2e0679c3bb37e651be4baaf1a86be59 Mon Sep 17 00:00:00 2001 From: tekampe Date: Wed, 31 Aug 2016 20:42:10 +0200 Subject: [PATCH 17/25] working --- lib/advapi32/src/lib.rs | 2 +- src/accctrl.rs | 116 ++++++++++++++++++++++++---------------- 2 files changed, 72 insertions(+), 46 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 629c8b7ae..c7ffcebc0 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -933,7 +933,7 @@ extern "system" { // pub fn SetEncryptedFileMetadata(); // pub fn SetEntriesInAccessListA(); // pub fn SetEntriesInAccessListW(); -//Todo +//Todo // pub fn SetEntriesInAclA(cCountOfExplicitEntries: ULONG, // pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: PACL, // ) -> DWORD; diff --git a/src/accctrl.rs b/src/accctrl.rs index 5029d89c4..43c3cbc17 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -1,3 +1,4 @@ + ENUM!{enum SE_OBJECT_TYPE { SE_UNKNOWN_OBJECT_TYPE = 0, SE_FILE_OBJECT, @@ -25,17 +26,78 @@ ENUM!{enum ACCESS_MODE { SET_AUDIT_FAILURE, }} -STRUCT!{struct PEXPLICIT_ACCESS_A { - grfAccessPermissions: DWORD, +STRUCT!{struct _PEXPLICIT_ACCESS_A { + grfAccessPermissions: ::DWORD, grfAccessMode: ::ACCESS_MODE, - grfInheritance: DWORD, - Trustee: TRUSTEE_A , + grfInheritance: ::DWORD, + // Trustee: TRUSTEE_A , }} -// pub type _EXPLICIT_ACCESS_A= PEXPLICIT_ACCESS_A; -// pub type *PEXPLICIT_ACCESS_A = PEXPLICIT_ACCESS_A; -// pub type EXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; -// pub type *PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A; +pub type EXPLICIT_ACCESS_A = _PEXPLICIT_ACCESS_A; +pub type PEXPLICIT_ACCESS_A = *mut _PEXPLICIT_ACCESS_A; +pub type EXPLICIT_ACCESSA = _PEXPLICIT_ACCESS_A; +pub type PEXPLICIT_ACCESSA = *mut _PEXPLICIT_ACCESS_A; + +// typedef struct _EXPLICIT_ACCESS_A +// { +// DWORD grfAccessPermissions; +// ACCESS_MODE grfAccessMode; +// DWORD grfInheritance; +// TRUSTEE_A Trustee; +// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; + +STRUCT!{struct _PEXPLICIT_ACCESS_W { + grfAccessPermissions: ::DWORD, + grfAccessMode: ::ACCESS_MODE, + grfInheritance: ::DWORD, + // Trustee: TRUSTEE_W , +}} + +pub type EXPLICIT_ACCESS_W = _PEXPLICIT_ACCESS_W; +pub type PEXPLICIT_ACCESS_W = *mut _PEXPLICIT_ACCESS_W; +pub type EXPLICIT_ACCESSW = _PEXPLICIT_ACCESS_W; +pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; + +// typedef struct _EXPLICIT_ACCESS_A +// { +// DWORD grfAccessPermissions; +// ACCESS_MODE grfAccessMode; +// DWORD grfInheritance; +// TRUSTEE_A Trustee; +// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; +// typedef struct _EXPLICIT_ACCESS_W +// { +// DWORD grfAccessPermissions; +// ACCESS_MODE grfAccessMode; +// DWORD grfInheritance; +// TRUSTEE_W Trustee; +// } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; + + +// #ifdef UNICODE +// typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_; +// typedef PEXPLICIT_ACCESS_W PEXPLICIT_ACCESS_; +// typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS; +// typedef PEXPLICIT_ACCESSW PEXPLICIT_ACCESS; +// #else +// typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_; +// typedef PEXPLICIT_ACCESS_A PEXPLICIT_ACCESS_; +// typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS; +// typedef PEXPLICIT_ACCESSA PEXPLICIT_ACCESS; +// #endif // UNICODE + + +// #ifdef UNICODE +// typedef TRUSTEE_W TRUSTEE_; +// typedef PTRUSTEE_W PTRUSTEE_; +// typedef TRUSTEEW TRUSTEE; +// typedef PTRUSTEEW PTRUSTEE; +// #else +// typedef TRUSTEE_A TRUSTEE_; +// typedef PTRUSTEE_A PTRUSTEE_; +// typedef TRUSTEEA TRUSTEE; +// typedef PTRUSTEEA PTRUSTEE; +// #endif // UNICODE // typedef struct _TRUSTEE_A @@ -84,17 +146,7 @@ STRUCT!{struct PEXPLICIT_ACCESS_A { // LPWSTR ptstrName; // #endif // } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW; -// #ifdef UNICODE -// typedef TRUSTEE_W TRUSTEE_; -// typedef PTRUSTEE_W PTRUSTEE_; -// typedef TRUSTEEW TRUSTEE; -// typedef PTRUSTEEW PTRUSTEE; -// #else -// typedef TRUSTEE_A TRUSTEE_; -// typedef PTRUSTEE_A PTRUSTEE_; -// typedef TRUSTEEA TRUSTEE; -// typedef PTRUSTEEA PTRUSTEE; -// #endif // UNICODE + // // Definition: EXPLICIT_ACCESS @@ -110,29 +162,3 @@ STRUCT!{struct PEXPLICIT_ACCESS_A { // Trustee - This field contains the definition of the trustee account the // explicit access applies to. // - -// typedef struct _EXPLICIT_ACCESS_A -// { -// DWORD grfAccessPermissions; -// ACCESS_MODE grfAccessMode; -// DWORD grfInheritance; -// TRUSTEE_A Trustee; -// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; -// typedef struct _EXPLICIT_ACCESS_W -// { -// DWORD grfAccessPermissions; -// ACCESS_MODE grfAccessMode; -// DWORD grfInheritance; -// TRUSTEE_W Trustee; -// } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; -// #ifdef UNICODE -// typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_; -// typedef PEXPLICIT_ACCESS_W PEXPLICIT_ACCESS_; -// typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS; -// typedef PEXPLICIT_ACCESSW PEXPLICIT_ACCESS; -// #else -// typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_; -// typedef PEXPLICIT_ACCESS_A PEXPLICIT_ACCESS_; -// typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS; -// typedef PEXPLICIT_ACCESSA PEXPLICIT_ACCESS; -// #endif // UNICODE From 5ffbe55e639431dce324636e4b7c959140754c4e Mon Sep 17 00:00:00 2001 From: tekampe Date: Sat, 3 Sep 2016 10:41:50 +0200 Subject: [PATCH 18/25] This version compiles now. modified: src/accctrl.rs --- src/accctrl.rs | 203 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 172 insertions(+), 31 deletions(-) diff --git a/src/accctrl.rs b/src/accctrl.rs index 43c3cbc17..0b53352b9 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -26,6 +26,15 @@ ENUM!{enum ACCESS_MODE { SET_AUDIT_FAILURE, }} + +// typedef struct _EXPLICIT_ACCESS_A +// { +// DWORD grfAccessPermissions; +// ACCESS_MODE grfAccessMode; +// DWORD grfInheritance; +// TRUSTEE_A Trustee; +// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; + STRUCT!{struct _PEXPLICIT_ACCESS_A { grfAccessPermissions: ::DWORD, grfAccessMode: ::ACCESS_MODE, @@ -38,13 +47,13 @@ pub type PEXPLICIT_ACCESS_A = *mut _PEXPLICIT_ACCESS_A; pub type EXPLICIT_ACCESSA = _PEXPLICIT_ACCESS_A; pub type PEXPLICIT_ACCESSA = *mut _PEXPLICIT_ACCESS_A; -// typedef struct _EXPLICIT_ACCESS_A +// typedef struct _EXPLICIT_ACCESS_W // { // DWORD grfAccessPermissions; // ACCESS_MODE grfAccessMode; // DWORD grfInheritance; -// TRUSTEE_A Trustee; -// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; +// TRUSTEE_W Trustee; +// } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; STRUCT!{struct _PEXPLICIT_ACCESS_W { grfAccessPermissions: ::DWORD, @@ -58,22 +67,6 @@ pub type PEXPLICIT_ACCESS_W = *mut _PEXPLICIT_ACCESS_W; pub type EXPLICIT_ACCESSW = _PEXPLICIT_ACCESS_W; pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; -// typedef struct _EXPLICIT_ACCESS_A -// { -// DWORD grfAccessPermissions; -// ACCESS_MODE grfAccessMode; -// DWORD grfInheritance; -// TRUSTEE_A Trustee; -// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; -// typedef struct _EXPLICIT_ACCESS_W -// { -// DWORD grfAccessPermissions; -// ACCESS_MODE grfAccessMode; -// DWORD grfInheritance; -// TRUSTEE_W Trustee; -// } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; - - // #ifdef UNICODE // typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_; // typedef PEXPLICIT_ACCESS_W PEXPLICIT_ACCESS_; @@ -86,19 +79,23 @@ pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; // typedef PEXPLICIT_ACCESSA PEXPLICIT_ACCESS; // #endif // UNICODE +#[cfg(unicode)] +pub type EXPLICIT_ACCESS_=EXPLICIT_ACCESS_W; +#[cfg(unicode)] +pub type PEXPLICIT_ACCESS_=PEXPLICIT_ACCESS_W; +#[cfg(unicode)] +pub type EXPLICIT_ACCESS=EXPLICIT_ACCESSW; +#[cfg(unicode)] +pub type PEXPLICIT_ACCESS=PEXPLICIT_ACCESSW; -// #ifdef UNICODE -// typedef TRUSTEE_W TRUSTEE_; -// typedef PTRUSTEE_W PTRUSTEE_; -// typedef TRUSTEEW TRUSTEE; -// typedef PTRUSTEEW PTRUSTEE; -// #else -// typedef TRUSTEE_A TRUSTEE_; -// typedef PTRUSTEE_A PTRUSTEE_; -// typedef TRUSTEEA TRUSTEE; -// typedef PTRUSTEEA PTRUSTEE; -// #endif // UNICODE - +#[cfg(not(unicode))] +pub type EXPLICIT_ACCESS_=EXPLICIT_ACCESS_A; +#[cfg(not(unicode))] +pub type PEXPLICIT_ACCESS_=PEXPLICIT_ACCESS_A; +#[cfg(not(unicode))] +pub type EXPLICIT_ACCESS=EXPLICIT_ACCESSA; +#[cfg(not(unicode))] +pub type PEXPLICIT_ACCESS=PEXPLICIT_ACCESSA; // typedef struct _TRUSTEE_A // { @@ -123,6 +120,21 @@ pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; // LPSTR ptstrName; // #endif // } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA; + +STRUCT!{struct _TRUSTEE_A { + pMultipleTrustee: *mut _TRUSTEE_A, + MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION, + TrusteeForm: TRUSTEE_FORM, + TrusteeType: TRUSTEE_TYPE, + ptstrName: ::LPSTR, +}} + + +pub type TRUSTEE_A = _TRUSTEE_A; +pub type PTRUSTEE_A = *mut _TRUSTEE_A; +pub type TRUSTEEA = _TRUSTEE_A; +pub type PTRUSTEEA = *mut _TRUSTEE_A; + // typedef struct _TRUSTEE_W // { // struct _TRUSTEE_W *pMultipleTrustee; @@ -147,6 +159,48 @@ pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; // #endif // } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW; +STRUCT!{struct _TRUSTEE_W { + pMultipleTrustee: *mut _TRUSTEE_A, + MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION, + TrusteeForm: TRUSTEE_FORM, + TrusteeType: TRUSTEE_TYPE, + ptstrName: ::LPWSTR, +}} + +pub type TRUSTEE_W = _TRUSTEE_W; +pub type PTRUSTEE_W = *mut _TRUSTEE_W; +pub type TRUSTEEW = _TRUSTEE_W; +pub type PTRUSTEEW = *mut _TRUSTEE_W; + +// #ifdef UNICODE +// typedef TRUSTEE_W TRUSTEE_; +// typedef PTRUSTEE_W PTRUSTEE_; +// typedef TRUSTEEW TRUSTEE; +// typedef PTRUSTEEW PTRUSTEE; +// #else +// typedef TRUSTEE_A TRUSTEE_; +// typedef PTRUSTEE_A PTRUSTEE_; +// typedef TRUSTEEA TRUSTEE; +// typedef PTRUSTEEA PTRUSTEE; +// #endif // UNICODE + +#[cfg(unicode)] +pub type TRUSTEE_=TRUSTEE_W; +#[cfg(unicode)] +pub type PTRUSTEE_=PTRUSTEE_W; +#[cfg(unicode)] +pub type TRUSTEE=TRUSTEEW; +#[cfg(unicode)] +pub type PTRUSTEE=PTRUSTEEW; + +#[cfg(not(unicode))] +pub type TRUSTEE_=TRUSTEE_A; +#[cfg(not(unicode))] +pub type PTRUSTEE_=PTRUSTEE_A; +#[cfg(not(unicode))] +pub type TRUSTEE=TRUSTEEA; +#[cfg(not(unicode))] +pub type PTRUSTEE=PTRUSTEEA; // // Definition: EXPLICIT_ACCESS @@ -162,3 +216,90 @@ pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; // Trustee - This field contains the definition of the trustee account the // explicit access applies to. // + + + +// +// Definition: TRUSTEE_TYPE +// This enumerated type specifies the type of trustee account for the trustee +// returned by the API described in this document. +// TRUSTEE_IS_UNKNOWN - The trustee is an unknown, but not necessarily invalid +// type. This field is not validated on input to the APIs +// that take Trustees. +// TRUSTEE_IS_USER The trustee account is a user account. +// TRUSTEE_IS_GROUP The trustee account is a group account. +// + +// typedef enum _TRUSTEE_TYPE +// { +// TRUSTEE_IS_UNKNOWN, +// TRUSTEE_IS_USER, +// TRUSTEE_IS_GROUP, +// TRUSTEE_IS_DOMAIN, +// TRUSTEE_IS_ALIAS, +// TRUSTEE_IS_WELL_KNOWN_GROUP, +// TRUSTEE_IS_DELETED, +// TRUSTEE_IS_INVALID, +// TRUSTEE_IS_COMPUTER +// } TRUSTEE_TYPE; + + +ENUM!{enum TRUSTEE_TYPE { + TRUSTEE_IS_UNKNOWN, + TRUSTEE_IS_USER, + TRUSTEE_IS_GROUP, + TRUSTEE_IS_DOMAIN, + TRUSTEE_IS_ALIAS, + TRUSTEE_IS_WELL_KNOWN_GROUP, + TRUSTEE_IS_DELETED, + TRUSTEE_IS_INVALID, + TRUSTEE_IS_COMPUTER, +}} + +// +// Definition: TRUSTEE_FORM +// This enumerated type specifies the form the trustee identifier is in for a +// particular trustee. +// TRUSTEE_IS_SID The trustee is identified with a SID rather than with a name. +// TRUSTEE_IS_NAME The trustee is identified with a name. +// + +// typedef enum _TRUSTEE_FORM +// { +// TRUSTEE_IS_SID, +// TRUSTEE_IS_NAME, +// TRUSTEE_BAD_FORM, +// TRUSTEE_IS_OBJECTS_AND_SID, +// TRUSTEE_IS_OBJECTS_AND_NAME +// } TRUSTEE_FORM; + +ENUM!{enum TRUSTEE_FORM { + TRUSTEE_IS_SID, + TRUSTEE_IS_NAME, + TRUSTEE_BAD_FORM, + TRUSTEE_IS_OBJECTS_AND_SID, + TRUSTEE_IS_OBJECTS_AND_NAME, +}} + + +// +// Definition: MULTIPLE_TRUSTEE_OPERATION +// If the trustee is a multiple trustee, this enumerated type specifies the type. +// TRUSTEE_IS_IMPERSONATE The trustee is an impersonate trustee and the multiple +// trustee field in the trustee points to another trustee +// that is a trustee for the server that will be doing the +// impersonation. +// +// +// typedef enum _MULTIPLE_TRUSTEE_OPERATION +// { +// NO_MULTIPLE_TRUSTEE, +// TRUSTEE_IS_IMPERSONATE, +// } MULTIPLE_TRUSTEE_OPERATION; +// + + +ENUM!{enum MULTIPLE_TRUSTEE_OPERATION { + NO_MULTIPLE_TRUSTEE, + TRUSTEE_IS_IMPERSONATE, +}} From df5c0b509e26269654f12d224b952a9492655ef2 Mon Sep 17 00:00:00 2001 From: tekampe Date: Sat, 3 Sep 2016 20:58:22 +0200 Subject: [PATCH 19/25] Uncommented SetEntriesInAclA and SetEntriesInAclW. Now compiling. --- lib/advapi32/src/lib.rs | 13 ++++++------- src/accctrl.rs | 1 - 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index c7ffcebc0..a8ba7c7e5 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -933,13 +933,12 @@ extern "system" { // pub fn SetEncryptedFileMetadata(); // pub fn SetEntriesInAccessListA(); // pub fn SetEntriesInAccessListW(); -//Todo - // pub fn SetEntriesInAclA(cCountOfExplicitEntries: ULONG, - // pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: PACL, - // ) -> DWORD; - // pub fn SetEntriesInAclW(cCountOfExplicitEntries: ULONG, - // pListOfExplicitEntries: PEXPLICIT_ACCESS_W, OldAcl: PACL, NewAcl: PACL, - // ) -> DWORD; + pub fn SetEntriesInAclA(cCountOfExplicitEntries: ULONG, + pListOfExplicitEntries: PEXPLICIT_ACCESS_A, OldAcl: PACL, NewAcl: PACL, + ) -> DWORD; + pub fn SetEntriesInAclW(cCountOfExplicitEntries: ULONG, + pListOfExplicitEntries: PEXPLICIT_ACCESS_W, OldAcl: PACL, NewAcl: PACL, + ) -> DWORD; // pub fn SetEntriesInAuditListA(); // pub fn SetEntriesInAuditListW(); // pub fn SetFileSecurityA(); diff --git a/src/accctrl.rs b/src/accctrl.rs index 0b53352b9..e7f8c72cb 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -129,7 +129,6 @@ STRUCT!{struct _TRUSTEE_A { ptstrName: ::LPSTR, }} - pub type TRUSTEE_A = _TRUSTEE_A; pub type PTRUSTEE_A = *mut _TRUSTEE_A; pub type TRUSTEEA = _TRUSTEE_A; From 084788a0cbaf69754bf8bbe24c83e84c8830695f Mon Sep 17 00:00:00 2001 From: tekampe Date: Sat, 3 Sep 2016 23:22:57 +0200 Subject: [PATCH 20/25] Working --- lib/advapi32/src/lib.rs | 8 ++++++-- src/accctrl.rs | 45 ++--------------------------------------- 2 files changed, 8 insertions(+), 45 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index a8ba7c7e5..7835ed208 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -410,8 +410,12 @@ extern "system" { // pub fn GetEventLogInformation(); // pub fn GetExplicitEntriesFromAclA(); // pub fn GetExplicitEntriesFromAclW(); - // pub fn GetFileSecurityA(); - // pub fn GetFileSecurityW(); + pub fn GetFileSecurityW(lpFileName: LPCWSTR, RequestedInformation: SECURITY_INFORMATION, + pSecurityDescriptor: PSECURITY_DESCRIPTOR, nLength: DWORD, lpnLengthNeeded: LPDWORD, + ) -> BOOL; + pub fn GetFileSecurityA(lpFileName: LPCSTR, RequestedInformation: SECURITY_INFORMATION, + pSecurityDescriptor: PSECURITY_DESCRIPTOR, nLength: DWORD, lpnLengthNeeded: LPDWORD, + ) -> BOOL; // pub fn GetInformationCodeAuthzLevelW(); // pub fn GetInformationCodeAuthzPolicyW(); // pub fn GetInheritanceSourceA(); diff --git a/src/accctrl.rs b/src/accctrl.rs index e7f8c72cb..3d31b3f66 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -121,6 +121,8 @@ pub type PEXPLICIT_ACCESS=PEXPLICIT_ACCESSA; // #endif // } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA; +///The original definition of _TRUSTEE_A in the Windows API contains a pre-compiler statement +///checking for the use of the midl Compiler. This statement has not been translated into this API STRUCT!{struct _TRUSTEE_A { pMultipleTrustee: *mut _TRUSTEE_A, MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION, @@ -201,33 +203,6 @@ pub type TRUSTEE=TRUSTEEA; #[cfg(not(unicode))] pub type PTRUSTEE=PTRUSTEEA; -// -// Definition: EXPLICIT_ACCESS -// This structure is used to pass access control entry information into and out -// of the system using the API defined in this document. -// grfAccessPermissions - This contains the access permissions to assign for the -// trustee. It is in the form of an NT access mask. -// grfAccessMode - This field defines how the permissions are to be applied for -// the trustee. -// grfInheritance - For containers, this field defines how the access control -// entry is/(is requested) to be inherited on -// objects/sub-containers created within the container. -// Trustee - This field contains the definition of the trustee account the -// explicit access applies to. -// - - - -// -// Definition: TRUSTEE_TYPE -// This enumerated type specifies the type of trustee account for the trustee -// returned by the API described in this document. -// TRUSTEE_IS_UNKNOWN - The trustee is an unknown, but not necessarily invalid -// type. This field is not validated on input to the APIs -// that take Trustees. -// TRUSTEE_IS_USER The trustee account is a user account. -// TRUSTEE_IS_GROUP The trustee account is a group account. -// // typedef enum _TRUSTEE_TYPE // { @@ -255,13 +230,6 @@ ENUM!{enum TRUSTEE_TYPE { TRUSTEE_IS_COMPUTER, }} -// -// Definition: TRUSTEE_FORM -// This enumerated type specifies the form the trustee identifier is in for a -// particular trustee. -// TRUSTEE_IS_SID The trustee is identified with a SID rather than with a name. -// TRUSTEE_IS_NAME The trustee is identified with a name. -// // typedef enum _TRUSTEE_FORM // { @@ -281,15 +249,6 @@ ENUM!{enum TRUSTEE_FORM { }} -// -// Definition: MULTIPLE_TRUSTEE_OPERATION -// If the trustee is a multiple trustee, this enumerated type specifies the type. -// TRUSTEE_IS_IMPERSONATE The trustee is an impersonate trustee and the multiple -// trustee field in the trustee points to another trustee -// that is a trustee for the server that will be doing the -// impersonation. -// -// // typedef enum _MULTIPLE_TRUSTEE_OPERATION // { // NO_MULTIPLE_TRUSTEE, From c5cde66559a0ce1e05bc15529bf43886dc579267 Mon Sep 17 00:00:00 2001 From: tekampe Date: Sun, 4 Sep 2016 16:09:44 +0200 Subject: [PATCH 21/25] Added ConvertSecurityDescriptorToStringSecurityDescriptorA and ConvertSecurityDescriptorToStringSecurityDescriptorW --- lib/advapi32/src/lib.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 7835ed208..8275652f9 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -129,6 +129,19 @@ extern "system" { // pub fn ConvertSecurityDescriptorToAccessW(); // pub fn ConvertSecurityDescriptorToStringSecurityDescriptorA(); // pub fn ConvertSecurityDescriptorToStringSecurityDescriptorW(); + + pub fn ConvertSecurityDescriptorToStringSecurityDescriptorA( + SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision ::DWORD, + SecurityInformation: SECURITY_INFORMATION, StringSecurityDescriptor *mut LPSTR, + StringSecurityDescriptorLen: PULONG, + ) -> BOOL; + + pub fn ConvertSecurityDescriptorToStringSecurityDescriptorW( + SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision ::DWORD, + SecurityInformation: SECURITY_INFORMATION, StringSecurityDescriptor *mut LPWSTR, + StringSecurityDescriptorLen: PULONG, + ) -> BOOL; + // pub fn ConvertSidToStringSidA(); // pub fn ConvertSidToStringSidW(); // pub fn ConvertStringSDToSDDomainA(); From aef59738776c17186acf707a512144ca1634405d Mon Sep 17 00:00:00 2001 From: tekampe Date: Sun, 4 Sep 2016 19:32:37 +0200 Subject: [PATCH 22/25] minor bugfix --- lib/advapi32/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 8275652f9..0df252061 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -131,14 +131,14 @@ extern "system" { // pub fn ConvertSecurityDescriptorToStringSecurityDescriptorW(); pub fn ConvertSecurityDescriptorToStringSecurityDescriptorA( - SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision ::DWORD, - SecurityInformation: SECURITY_INFORMATION, StringSecurityDescriptor *mut LPSTR, + SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision: DWORD, + SecurityInformation: SECURITY_INFORMATION, StringSecurityDescriptor: *mut LPSTR, StringSecurityDescriptorLen: PULONG, ) -> BOOL; pub fn ConvertSecurityDescriptorToStringSecurityDescriptorW( - SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision ::DWORD, - SecurityInformation: SECURITY_INFORMATION, StringSecurityDescriptor *mut LPWSTR, + SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision: DWORD, + SecurityInformation: SECURITY_INFORMATION, StringSecurityDescriptor: *mut LPWSTR, StringSecurityDescriptorLen: PULONG, ) -> BOOL; From 7bb5b1406d9b905a644a38fd666a63f33908ad32 Mon Sep 17 00:00:00 2001 From: tekampe Date: Sun, 4 Sep 2016 23:25:40 +0200 Subject: [PATCH 23/25] cleaning up --- lib/advapi32/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 0df252061..729cad28a 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -127,8 +127,6 @@ extern "system" { // pub fn ConvertSecurityDescriptorToAccessNamedA(); // pub fn ConvertSecurityDescriptorToAccessNamedW(); // pub fn ConvertSecurityDescriptorToAccessW(); - // pub fn ConvertSecurityDescriptorToStringSecurityDescriptorA(); - // pub fn ConvertSecurityDescriptorToStringSecurityDescriptorW(); pub fn ConvertSecurityDescriptorToStringSecurityDescriptorA( SecurityDescriptor: PSECURITY_DESCRIPTOR,RequestedStringSDRevision: DWORD, From 1bb62e2c22d0f5833cfa9eec1db2c9cfc2a4a303 Mon Sep 17 00:00:00 2001 From: tekampe Date: Tue, 6 Sep 2016 12:28:58 +0200 Subject: [PATCH 24/25] cleaned up, added the funtions to the test file --- src/accctrl.rs | 129 +--------------------------------------------- tests/advapi32.rs | 7 +++ 2 files changed, 9 insertions(+), 127 deletions(-) diff --git a/src/accctrl.rs b/src/accctrl.rs index 3d31b3f66..30da78fe9 100644 --- a/src/accctrl.rs +++ b/src/accctrl.rs @@ -26,20 +26,11 @@ ENUM!{enum ACCESS_MODE { SET_AUDIT_FAILURE, }} - -// typedef struct _EXPLICIT_ACCESS_A -// { -// DWORD grfAccessPermissions; -// ACCESS_MODE grfAccessMode; -// DWORD grfInheritance; -// TRUSTEE_A Trustee; -// } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; - STRUCT!{struct _PEXPLICIT_ACCESS_A { grfAccessPermissions: ::DWORD, grfAccessMode: ::ACCESS_MODE, grfInheritance: ::DWORD, - // Trustee: TRUSTEE_A , + Trustee: TRUSTEE_A , }} pub type EXPLICIT_ACCESS_A = _PEXPLICIT_ACCESS_A; @@ -47,19 +38,11 @@ pub type PEXPLICIT_ACCESS_A = *mut _PEXPLICIT_ACCESS_A; pub type EXPLICIT_ACCESSA = _PEXPLICIT_ACCESS_A; pub type PEXPLICIT_ACCESSA = *mut _PEXPLICIT_ACCESS_A; -// typedef struct _EXPLICIT_ACCESS_W -// { -// DWORD grfAccessPermissions; -// ACCESS_MODE grfAccessMode; -// DWORD grfInheritance; -// TRUSTEE_W Trustee; -// } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; - STRUCT!{struct _PEXPLICIT_ACCESS_W { grfAccessPermissions: ::DWORD, grfAccessMode: ::ACCESS_MODE, grfInheritance: ::DWORD, - // Trustee: TRUSTEE_W , + Trustee: TRUSTEE_W , }} pub type EXPLICIT_ACCESS_W = _PEXPLICIT_ACCESS_W; @@ -67,18 +50,6 @@ pub type PEXPLICIT_ACCESS_W = *mut _PEXPLICIT_ACCESS_W; pub type EXPLICIT_ACCESSW = _PEXPLICIT_ACCESS_W; pub type PEXPLICIT_ACCESSW = *mut _PEXPLICIT_ACCESS_W; -// #ifdef UNICODE -// typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_; -// typedef PEXPLICIT_ACCESS_W PEXPLICIT_ACCESS_; -// typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS; -// typedef PEXPLICIT_ACCESSW PEXPLICIT_ACCESS; -// #else -// typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_; -// typedef PEXPLICIT_ACCESS_A PEXPLICIT_ACCESS_; -// typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS; -// typedef PEXPLICIT_ACCESSA PEXPLICIT_ACCESS; -// #endif // UNICODE - #[cfg(unicode)] pub type EXPLICIT_ACCESS_=EXPLICIT_ACCESS_W; #[cfg(unicode)] @@ -97,32 +68,6 @@ pub type EXPLICIT_ACCESS=EXPLICIT_ACCESSA; #[cfg(not(unicode))] pub type PEXPLICIT_ACCESS=PEXPLICIT_ACCESSA; -// typedef struct _TRUSTEE_A -// { -// struct _TRUSTEE_A *pMultipleTrustee; -// MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; -// TRUSTEE_FORM TrusteeForm; -// TRUSTEE_TYPE TrusteeType; -// #ifdef __midl -// [switch_is(TrusteeForm)] -// union -// { -// [case(TRUSTEE_IS_NAME)] -// LPSTR ptstrName; -// [case(TRUSTEE_IS_SID)] -// SID *pSid; -// [case(TRUSTEE_IS_OBJECTS_AND_SID)] -// OBJECTS_AND_SID *pObjectsAndSid; -// [case(TRUSTEE_IS_OBJECTS_AND_NAME)] -// OBJECTS_AND_NAME_A *pObjectsAndName; -// }; -// #else -// LPSTR ptstrName; -// #endif -// } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA; - -///The original definition of _TRUSTEE_A in the Windows API contains a pre-compiler statement -///checking for the use of the midl Compiler. This statement has not been translated into this API STRUCT!{struct _TRUSTEE_A { pMultipleTrustee: *mut _TRUSTEE_A, MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION, @@ -136,30 +81,6 @@ pub type PTRUSTEE_A = *mut _TRUSTEE_A; pub type TRUSTEEA = _TRUSTEE_A; pub type PTRUSTEEA = *mut _TRUSTEE_A; -// typedef struct _TRUSTEE_W -// { -// struct _TRUSTEE_W *pMultipleTrustee; -// MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; -// TRUSTEE_FORM TrusteeForm; -// TRUSTEE_TYPE TrusteeType; -// #ifdef __midl -// [switch_is(TrusteeForm)] -// union -// { -// [case(TRUSTEE_IS_NAME)] -// LPWSTR ptstrName; -// [case(TRUSTEE_IS_SID)] -// SID *pSid; -// [case(TRUSTEE_IS_OBJECTS_AND_SID)] -// OBJECTS_AND_SID *pObjectsAndSid; -// [case(TRUSTEE_IS_OBJECTS_AND_NAME)] -// OBJECTS_AND_NAME_W *pObjectsAndName; -// }; -// #else -// LPWSTR ptstrName; -// #endif -// } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW; - STRUCT!{struct _TRUSTEE_W { pMultipleTrustee: *mut _TRUSTEE_A, MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION, @@ -173,18 +94,6 @@ pub type PTRUSTEE_W = *mut _TRUSTEE_W; pub type TRUSTEEW = _TRUSTEE_W; pub type PTRUSTEEW = *mut _TRUSTEE_W; -// #ifdef UNICODE -// typedef TRUSTEE_W TRUSTEE_; -// typedef PTRUSTEE_W PTRUSTEE_; -// typedef TRUSTEEW TRUSTEE; -// typedef PTRUSTEEW PTRUSTEE; -// #else -// typedef TRUSTEE_A TRUSTEE_; -// typedef PTRUSTEE_A PTRUSTEE_; -// typedef TRUSTEEA TRUSTEE; -// typedef PTRUSTEEA PTRUSTEE; -// #endif // UNICODE - #[cfg(unicode)] pub type TRUSTEE_=TRUSTEE_W; #[cfg(unicode)] @@ -203,21 +112,6 @@ pub type TRUSTEE=TRUSTEEA; #[cfg(not(unicode))] pub type PTRUSTEE=PTRUSTEEA; - -// typedef enum _TRUSTEE_TYPE -// { -// TRUSTEE_IS_UNKNOWN, -// TRUSTEE_IS_USER, -// TRUSTEE_IS_GROUP, -// TRUSTEE_IS_DOMAIN, -// TRUSTEE_IS_ALIAS, -// TRUSTEE_IS_WELL_KNOWN_GROUP, -// TRUSTEE_IS_DELETED, -// TRUSTEE_IS_INVALID, -// TRUSTEE_IS_COMPUTER -// } TRUSTEE_TYPE; - - ENUM!{enum TRUSTEE_TYPE { TRUSTEE_IS_UNKNOWN, TRUSTEE_IS_USER, @@ -230,16 +124,6 @@ ENUM!{enum TRUSTEE_TYPE { TRUSTEE_IS_COMPUTER, }} - -// typedef enum _TRUSTEE_FORM -// { -// TRUSTEE_IS_SID, -// TRUSTEE_IS_NAME, -// TRUSTEE_BAD_FORM, -// TRUSTEE_IS_OBJECTS_AND_SID, -// TRUSTEE_IS_OBJECTS_AND_NAME -// } TRUSTEE_FORM; - ENUM!{enum TRUSTEE_FORM { TRUSTEE_IS_SID, TRUSTEE_IS_NAME, @@ -248,15 +132,6 @@ ENUM!{enum TRUSTEE_FORM { TRUSTEE_IS_OBJECTS_AND_NAME, }} - -// typedef enum _MULTIPLE_TRUSTEE_OPERATION -// { -// NO_MULTIPLE_TRUSTEE, -// TRUSTEE_IS_IMPERSONATE, -// } MULTIPLE_TRUSTEE_OPERATION; -// - - ENUM!{enum MULTIPLE_TRUSTEE_OPERATION { NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_IMPERSONATE, diff --git a/tests/advapi32.rs b/tests/advapi32.rs index 5563d33b1..debef9b3e 100644 --- a/tests/advapi32.rs +++ b/tests/advapi32.rs @@ -93,4 +93,11 @@ fn functions() { bb(StartServiceCtrlDispatcherA); bb(StartServiceCtrlDispatcherW); bb(GetSecurityInfo); + bb(ConvertSecurityDescriptorToStringSecurityDescriptorA); + bb(ConvertSecurityDescriptorToStringSecurityDescriptorW); + bb(GetFileSecurityW); + bb(GetFileSecurityA); + bb(GetNamedSecurityInfoA); + bb(GetNamedSecurityInfoW); + bb(GetSecurityInfo); } From 108e1823a306db575fe7eb51e9f5a7b42750dfcb Mon Sep 17 00:00:00 2001 From: Nils Tekampe Date: Sat, 17 Sep 2016 13:04:52 +0200 Subject: [PATCH 25/25] added SetNamedSecurityInfo --- lib/advapi32/src/lib.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/advapi32/src/lib.rs b/lib/advapi32/src/lib.rs index 729cad28a..f76577fed 100644 --- a/lib/advapi32/src/lib.rs +++ b/lib/advapi32/src/lib.rs @@ -961,10 +961,16 @@ extern "system" { // pub fn SetInformationCodeAuthzLevelW(); // pub fn SetInformationCodeAuthzPolicyW(); // pub fn SetKernelObjectSecurity(); - // pub fn SetNamedSecurityInfoA(); + pub fn SetNamedSecurityInfoA(pObjectName: LPSTR, ObjectType: SE_OBJECT_TYPE, + SecurityInfo: SECURITY_INFORMATION, psidOwner: PSID, psidGroup: PSID, pDacl: PACL, + pSacl: PACL + ) -> DWORD; + pub fn SetNamedSecurityInfoW(pObjectName: LPWSTR, ObjectType: SE_OBJECT_TYPE, + SecurityInfo: SECURITY_INFORMATION, psidOwner: PSID, psidGroup: PSID, pDacl: PACL, + pSacl: PACL + ) -> DWORD; // pub fn SetNamedSecurityInfoExA(); // pub fn SetNamedSecurityInfoExW(); - // pub fn SetNamedSecurityInfoW(); // pub fn SetPrivateObjectSecurity(); // pub fn SetPrivateObjectSecurityEx(); // pub fn SetSecurityAccessMask();