[ object, uuid (2e9b11a0-d532-11cf-aef3-00aa0044fb89), version(1.0), pointer_default(unique) ] interface IAccessControlTest : IUnknown { import "unknwn.idl"; #pragma midl_echo("#ifndef UNICODE") #pragma midl_echo("#define UNICODE") #pragma midl_echo("#define UNICODE_NOT_DEFINED") #pragma midl_echo("#endif") #pragma midl_echo("#ifndef __ACCESS_CONTROL__") #pragma midl_echo("#define __ACCESS_CONTROL__") #include "accctrl.h"; #pragma midl_echo("#endif") #pragma midl_echo("#ifdef UNICODE_NOT_DEFINED") #pragma midl_echo("#undef UNICODE") #pragma midl_echo("#undef UNICODE_NOT_DEFINED") #pragma midl_echo("#endif") // In order to make sure that the SID in the trustee structure gets marshalled // properly, we introduce the following union type typedef struct tagSSID_IDENTIFIER_AUTHORITY{ UCHAR Value[6]; } SSID_IDENTIFIER_AUTHORITY; typedef struct tagSTREAM_SID { UCHAR Revision; UCHAR SubAuthorityCount; SSID_IDENTIFIER_AUTHORITY IdentifierAuthority; [size_is(SubAuthorityCount)]ULONG SubAuthority[*]; }STREAM_SID, *PSTREAM_SID; typedef [switch_type(TRUSTEE_FORM)] union _TRUSTEE_ID { [case(TRUSTEE_IS_NAME)] LPWSTR pwszTrusteeName; [case(TRUSTEE_IS_SID)] PSTREAM_SID pSID; [default] ; } TRUSTEE_ID; typedef struct _E_TRUSTEE *PE_TRUSTEE; typedef struct _E_TRUSTEE { PE_TRUSTEE pMultipleTrustee; MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; TRUSTEE_FORM TrusteeForm; TRUSTEE_TYPE TrusteeType; [switch_is(TrusteeForm)] TRUSTEE_ID TrusteeID; } E_TRUSTEE; typedef struct _E_ACCESS_REQUEST { DWORD grfAccessPermissions; E_TRUSTEE Trustee; } E_ACCESS_REQUEST, *PE_ACCESS_REQUEST; typedef struct _E_EXPLICIT_ACCESS { DWORD grfAccessPermissions; ACCESS_MODE grfAccessMode; DWORD grfInheritance; E_TRUSTEE Trustee; } E_EXPLICIT_ACCESS, *PE_EXPLICIT_ACCESS; HRESULT TestServer ( [in] LPSTR pszTestString ); HRESULT GetClassID ( [out] CLSID *pClassID, [out] DOUBLE *pdMillisec ); HRESULT InitNewACL ( [out] DOUBLE *pdMillisec ); HRESULT LoadACL ( [in] LPCSTR pszFilename, [out] DOUBLE *pdMillisec ); HRESULT SaveACL ( [in] LPCSTR pszFilename, [in] BOOL fClearDirty, [out] ULONG *pulBytesWritten, [out] DOUBLE *pdMillisec ); HRESULT GetSizeMax ( [out] ULONG *pcdSize, [out] DOUBLE *pdMillisec ); HRESULT IsDirty ( [out] DOUBLE *pdMillisec ); HRESULT GrantAccessRights ( [in] ULONG cCount, [in, size_is(cCount)] E_ACCESS_REQUEST *pAccessRequestList, [out] DOUBLE *pdMillisec ); HRESULT DenyAccessRights ( [in] ULONG cCount, [in, size_is(cCount)] E_ACCESS_REQUEST pAccessRequestList[], [out] DOUBLE *pdMillisec ); HRESULT SetAccessRights ( [in] ULONG cCount, [in, size_is(cCount)] E_ACCESS_REQUEST pAccessRequestList[], [out] DOUBLE *pdMillisec ); HRESULT ReplaceAllAccessRights ( [in] ULONG cCount, [in, size_is(cCount)] E_EXPLICIT_ACCESS pExplicitAccessList[], [out] DOUBLE *pdMillisec ); HRESULT RevokeExplicitAccessRights ( [in] ULONG cCount, [in, size_is(cCount)] E_TRUSTEE pTrustee[], [out] DOUBLE *pdMillisec ); HRESULT IsAccessPermitted ( [in] E_TRUSTEE *pTrustee, [in] DWORD grfAccessPermissions, [out] DOUBLE *pdMillisec ); HRESULT GetEffectiveAccessRights ( [in] E_TRUSTEE *pTrustee, [out] DWORD *pdwRights, [out] DOUBLE *pdMillisec ); HRESULT GetExplicitAccessRights ( [out] ULONG *pcCount, [out, size_is(,*pcCount)] PE_EXPLICIT_ACCESS *ppExplicitAccessList, [out] DOUBLE *pdMillisec ); HRESULT RevertAccessRights ( ); HRESULT CommitAccessRights ( [in] DWORD grfCommitFlags ); }