Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added GetSecurityInfo #315

Closed
wants to merge 26 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 74 additions & 17 deletions lib/advapi32/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,19 @@ 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,
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();
Expand Down Expand Up @@ -410,8 +421,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();
Expand All @@ -426,10 +441,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();
Expand All @@ -441,7 +464,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,
) -> DWORD;
// pub fn GetSecurityInfoExA();
// pub fn GetSecurityInfoExW();
// pub fn GetServiceDisplayNameA();
Expand Down Expand Up @@ -498,12 +525,32 @@ extern "system" {
// pub fn LogonUserExExW();
// pub fn LogonUserExW();
// pub fn LogonUserW();
// pub fn LookupAccountNameA();
// pub fn LookupAccountNameW();
// pub fn LookupAccountSidA();
// pub fn LookupAccountSidW();
// pub fn LookupPrivilegeDisplayNameA();
// pub fn LookupPrivilegeDisplayNameW();
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(
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 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;
Expand Down Expand Up @@ -901,19 +948,29 @@ 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();
// pub fn SetFileSecurityW();
// 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();
Expand Down
138 changes: 138 additions & 0 deletions src/accctrl.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@

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,
SE_REGISTRY_WOW64_64KEY,
}}

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 = *mut _PEXPLICIT_ACCESS_A;
pub type EXPLICIT_ACCESSA = _PEXPLICIT_ACCESS_A;
pub type PEXPLICIT_ACCESSA = *mut _PEXPLICIT_ACCESS_A;

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;

#[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;

#[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;

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;

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;

#[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;

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,
}}

ENUM!{enum TRUSTEE_FORM {
TRUSTEE_IS_SID,
TRUSTEE_IS_NAME,
TRUSTEE_BAD_FORM,
TRUSTEE_IS_OBJECTS_AND_SID,
TRUSTEE_IS_OBJECTS_AND_NAME,
}}

ENUM!{enum MULTIPLE_TRUSTEE_OPERATION {
NO_MULTIPLE_TRUSTEE,
TRUSTEE_IS_IMPERSONATE,
}}
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
Expand Down Expand Up @@ -189,6 +190,7 @@ pub use xinput::*;
// Modules
//-------------------------------------------------------------------------------------------------
#[macro_use] mod macros;
pub mod accctrl;
pub mod activation;
pub mod audioclient;
pub mod audiosessiontypes;
Expand Down
8 changes: 8 additions & 0 deletions tests/advapi32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,12 @@ fn functions() {
bb(SetServiceStatus);
bb(StartServiceCtrlDispatcherA);
bb(StartServiceCtrlDispatcherW);
bb(GetSecurityInfo);
bb(ConvertSecurityDescriptorToStringSecurityDescriptorA);
bb(ConvertSecurityDescriptorToStringSecurityDescriptorW);
bb(GetFileSecurityW);
bb(GetFileSecurityA);
bb(GetNamedSecurityInfoA);
bb(GetNamedSecurityInfoW);
bb(GetSecurityInfo);
}