📄 idsspi.pas
字号:
ACCEPT_SECURITY_CONTEXT_FN = function( // AcceptSecurityContext
phCredential: PCredHandle; // Cred to base context
phContext: PCtxtHandle; // Existing context (OPT)
pInput: PSecBufferDesc; // Input buffer
fContextReq: ULONG; // Context Requirements
TargetDataRep: ULONG; // Target Data Rep
phNewContext: PCtxtHandle; // (out) New context handle
pOutput: PSecBufferDesc; // (inout) Output buffers
pfContextAttr: PULONG; // (out) Context attributes
ptsExpiry: PTimeStamp // (out) Life span (OPT)
): SECURITY_STATUS; stdcall;
COMPLETE_AUTH_TOKEN_FN = function( // CompleteAuthToken
phContext: PCtxtHandle; // Context to complete
pToken: PSecBufferDesc // Token to complete
): SECURITY_STATUS; stdcall;
IMPERSONATE_SECURITY_CONTEXT_FN = function( // ImpersonateSecurityContext
phContext: PCtxtHandle
): SECURITY_STATUS; stdcall;
REVERT_SECURITY_CONTEXT_FN = function( // RevertSecurityContext
phContext: PCtxtHandle
): SECURITY_STATUS; stdcall;
QUERY_SECURITY_CONTEXT_TOKEN_FN = function( // QuerySecurityContextToken
phContext: PCtxtHandle;
Token: PPVOID
): SECURITY_STATUS; stdcall;
DELETE_SECURITY_CONTEXT_FN = function( // DeleteSecurityContext
phContext: PCtxtHandle
): SECURITY_STATUS; stdcall;
APPLY_CONTROL_TOKEN_FN = function( // ApplyControlToken
phContext: PCtxtHandle; // Context to modify
pInput: PSecBufferDesc // Input token to apply
): SECURITY_STATUS; stdcall;
QUERY_CONTEXT_ATTRIBUTES_FN_W = function( // QueryContextAttributesW
phContext: PCtxtHandle; // Context to query
ulAttribute: ULONG; // Attribute to query
pBuffer: PVOID // Buffer for attributes
): SECURITY_STATUS; stdcall;
QUERY_CONTEXT_ATTRIBUTES_FN_A = function( // QueryContextAttributesA
phContext: PCtxtHandle; // Context to query
ulAttribute: ULONG; // Attribute to query
pBuffer: PVOID // Buffer for attributes
): SECURITY_STATUS; stdcall;
{$IFDEF SSPI_UNICODE}
QUERY_CONTEXT_ATTRIBUTES_FN = QUERY_CONTEXT_ATTRIBUTES_FN_W;
{$ELSE}
QUERY_CONTEXT_ATTRIBUTES_FN = QUERY_CONTEXT_ATTRIBUTES_FN_A;
{$ENDIF}
QUERY_CREDENTIALS_ATTRIBUTES_FN_W = function( // QueryCredentialsAttributesW
phCredential: PCredHandle; // Credential to query
ulAttribute: ULONG; // Attribute to query
pBuffer: PVOID // Buffer for attributes
): SECURITY_STATUS; stdcall;
QUERY_CREDENTIALS_ATTRIBUTES_FN_A = function( // QueryCredentialsAttributesA
phCredential: PCredHandle; // Credential to query
ulAttribute: ULONG; // Attribute to query
pBuffer: PVOID // Buffer for attributes
): SECURITY_STATUS; stdcall;
{$IFDEF SSPI_UNICODE}
QUERY_CREDENTIALS_ATTRIBUTES_FN = QUERY_CREDENTIALS_ATTRIBUTES_FN_W;
{$ELSE}
QUERY_CREDENTIALS_ATTRIBUTES_FN = QUERY_CREDENTIALS_ATTRIBUTES_FN_A;
{$ENDIF}
FREE_CONTEXT_BUFFER_FN = function( // FreeContextBuffer
pvContextBuffer: PVOID // buffer to free
): SECURITY_STATUS; stdcall;
///////////////////////////////////////////////////////////////////
////
//// Message Support API
////
//////////////////////////////////////////////////////////////////
type
MAKE_SIGNATURE_FN = function( // MakeSignature
phContext: PCtxtHandle; // Context to use
fQOP: ULONG; // Quality of Protection
pMessage: PSecBufferDesc; // Message to sign
MessageSeqNo: ULONG // Message Sequence Num.
): SECURITY_STATUS; stdcall;
VERIFY_SIGNATURE_FN = function( // VerifySignature
phContext: PCtxtHandle; // Context to use
pMessage: PSecBufferDesc; // Message to verify
MessageSeqNo: ULONG; // Sequence Num.
pfQOP: PULONG // QOP used
): SECURITY_STATUS; stdcall;
ENCRYPT_MESSAGE_FN = function( // EncryptMessage
phContext: PCtxtHandle;
fQOP: ULONG;
pMessage: PSecBufferDesc;
MessageSeqNo: ULONG
): SECURITY_STATUS; stdcall;
DECRYPT_MESSAGE_FN = function( // DecryptMessage
phContext: PCtxtHandle;
pMessage: PSecBufferDesc;
MessageSeqNo: ULONG;
pfQOP: PULONG
): SECURITY_STATUS; stdcall;
///////////////////////////////////////////////////////////////////////////
////
//// Misc.
////
///////////////////////////////////////////////////////////////////////////
type
ENUMERATE_SECURITY_PACKAGES_FN_W = function( // EnumerateSecurityPackagesW
pcPackages: PULONG; // Receives num. packages
ppPackageInfo: PPSecPkgInfoW // Receives array of info
): SECURITY_STATUS; stdcall;
ENUMERATE_SECURITY_PACKAGES_FN_A = function( // EnumerateSecurityPackagesA
pcPackages: PULONG; // Receives num. packages
ppPackageInfo: PPSecPkgInfoA // Receives array of info
): SECURITY_STATUS; stdcall;
{$IFDEF SSPI_UNICODE}
ENUMERATE_SECURITY_PACKAGES_FN = ENUMERATE_SECURITY_PACKAGES_FN_W;
{$ELSE}
ENUMERATE_SECURITY_PACKAGES_FN = ENUMERATE_SECURITY_PACKAGES_FN_A;
{$ENDIF}
QUERY_SECURITY_PACKAGE_INFO_FN_W = function( // QuerySecurityPackageInfoW
pszPackageName: PSEC_WCHAR; // Name of package
ppPackageInfo: PPSecPkgInfoW // Receives package info
): SECURITY_STATUS; stdcall;
QUERY_SECURITY_PACKAGE_INFO_FN_A = function( // QuerySecurityPackageInfoA
pszPackageName: PSEC_CHAR; // Name of package
ppPackageInfo: PPSecPkgInfoA // Receives package info
): SECURITY_STATUS; stdcall;
{$IFDEF SSPI_UNICODE}
QUERY_SECURITY_PACKAGE_INFO_FN = QUERY_SECURITY_PACKAGE_INFO_FN_W;
{$ELSE}
QUERY_SECURITY_PACKAGE_INFO_FN = QUERY_SECURITY_PACKAGE_INFO_FN_A;
{$ENDIF}
PSecDelegationType = ^SecDelegationType;
SecDelegationType = (
SecFull,
SecService,
SecTree,
SecDirectory,
SecObject
);
DELEGATE_SECURITY_CONTEXT_FN = function( // DelegateSecurityContext
phContext: PCtxtHandle; // IN Active context to delegate
pszTarget: PSEC_CHAR;
DelegationType: SecDelegationType; // IN Type of delegation
pExpiry: PTimeStamp; // IN OPTIONAL time limit
pPackageParameters: PSecBuffer; // IN OPTIONAL package specific
pOutput: PSecBufferDesc // OUT Token for applycontroltoken.
): SECURITY_STATUS; stdcall;
///////////////////////////////////////////////////////////////////////////
////
//// Proxies
////
///////////////////////////////////////////////////////////////////////////
//
// Proxies are only available on NT platforms
//
///////////////////////////////////////////////////////////////////////////
////
//// Context export/import
////
///////////////////////////////////////////////////////////////////////////
type
EXPORT_SECURITY_CONTEXT_FN = function( // ExportSecurityContext
phContext: PCtxtHandle; // (in) context to export
fFlags: ULONG; // (in) option flags
pPackedContext: PSecBuffer; // (out) marshalled context
pToken: PPVOID // (out, optional) token handle for impersonation
): SECURITY_STATUS; stdcall;
IMPORT_SECURITY_CONTEXT_FN_W = function( // ImportSecurityContextW
pszPackage: PSEC_WCHAR;
pPackedContext: PSecBuffer; // (in) marshalled context
Token: PVOID; // (in, optional) handle to token for context
phContext: PCtxtHandle // (out) new context handle
): SECURITY_STATUS; stdcall;
IMPORT_SECURITY_CONTEXT_FN_A = function( // ImportSecurityContextA
pszPackage: PSEC_CHAR;
pPackedContext: PSecBuffer; // (in) marshalled context
Token: PVOID; // (in, optional) handle to token for context
phContext: PCtxtHandle // (out) new context handle
): SECURITY_STATUS; stdcall;
{$IFDEF SSPI_UNICODE}
IMPORT_SECURITY_CONTEXT_FN = IMPORT_SECURITY_CONTEXT_FN_W;
{$ELSE}
IMPORT_SECURITY_CONTEXT_FN = IMPORT_SECURITY_CONTEXT_FN_A;
{$ENDIF}
///////////////////////////////////////////////////////////////////////////////
////
//// Fast access for RPC:
////
///////////////////////////////////////////////////////////////////////////////
const
SECURITY_ENTRYPOINT_ANSIW = 'InitSecurityInterfaceW'; {Do not Localize}
SECURITY_ENTRYPOINT_ANSIA = 'InitSecurityInterfaceA'; {Do not Localize}
SECURITY_ENTRYPOINTW = 'InitSecurityInterfaceW'; {Do not Localize}
SECURITY_ENTRYPOINTA = 'InitSecurityInterfaceA'; {Do not Localize}
SECURITY_ENTRYPOINT16 = 'INITSECURITYINTERFACEA'; {Do not Localize}
{$IFDEF SSPI_UNICODE}
SECURITY_ENTRYPOINT = SECURITY_ENTRYPOINTW;
SECURITY_ENTRYPOINT_ANSI = SECURITY_ENTRYPOINTW;
{$ELSE}
SECURITY_ENTRYPOINT = SECURITY_ENTRYPOINTA;
SECURITY_ENTRYPOINT_ANSI = SECURITY_ENTRYPOINTA;
{$ENDIF}
type
PSecurityFunctionTableW = ^SecurityFunctionTableW;
SecurityFunctionTableW = record
dwVersion: ULONG;
EnumerateSecurityPackagesW: ENUMERATE_SECURITY_PACKAGES_FN_W;
QueryCredentialsAttributesW: QUERY_CREDENTIALS_ATTRIBUTES_FN_W;
AcquireCredentialsHandleW: ACQUIRE_CREDENTIALS_HANDLE_FN_W;
FreeCredentialsHandle: FREE_CREDENTIALS_HANDLE_FN;
Reserved2: PVOID;
InitializeSecurityContextW: INITIALIZE_SECURITY_CONTEXT_FN_W;
AcceptSecurityContext: ACCEPT_SECURITY_CONTEXT_FN;
CompleteAuthToken: COMPLETE_AUTH_TOKEN_FN;
DeleteSecurityContext: DELETE_SECURITY_CONTEXT_FN;
ApplyControlToken: APPLY_CONTROL_TOKEN_FN;
QueryContextAttributesW: QUERY_CONTEXT_ATTRIBUTES_FN_W;
ImpersonateSecurityContext: IMPERSONATE_SECURITY_CONTEXT_FN;
RevertSecurityContext: REVERT_SECURITY_CONTEXT_FN;
MakeSignature: MAKE_SIGNATURE_FN;
VerifySignature: VERIFY_SIGNATURE_FN;
FreeContextBuffer: FREE_CONTEXT_BUFFER_FN;
QuerySecurityPackageInfoW: QUERY_SECURITY_PACKAGE_INFO_FN_W;
Reserved3: PVOID;
Reserved4: PVOID;
ExportSecurityContext: EXPORT_SECURITY_CONTEXT_FN;
ImportSecurityContextW: IMPORT_SECURITY_CONTEXT_FN_W;
AddCredentialsW : ADD_CREDENTIALS_FN_W;
Reserved8: PVOID;
QuerySecurityContextToken: QUERY_SECURITY_CONTEXT_TOKEN_FN;
EncryptMessage: ENCRYPT_MESSAGE_FN;
DecryptMessage: DECRYPT_MESSAGE_FN;
end;
PSecurityFunctionTableA = ^SecurityFunctionTableA;
SecurityFunctionTableA = record
dwVersion: ULONG;
EnumerateSecurityPackagesA: ENUMERATE_SECURITY_PACKAGES_FN_A;
QueryCredentialsAttributesA: QUERY_CREDENTIALS_ATTRIBUTES_FN_A;
AcquireCredentialsHandleA: ACQUIRE_CREDENTIALS_HANDLE_FN_A;
FreeCredentialHandle: FREE_CREDENTIALS_HANDLE_FN;
Reserved2: PVOID;
InitializeSecurityContextA: INITIALIZE_SECURITY_CONTEXT_FN_A;
AcceptSecurityContext: ACCEPT_SECURITY_CONTEXT_FN;
CompleteAuthToken: COMPLETE_AUTH_TOKEN_FN;
DeleteSecurityContext: DELETE_SECURITY_CONTEXT_FN;
ApplyControlToken: APPLY_CONTROL_TOKEN_FN;
QueryContextAttributesA: QUERY_CONTEXT_ATTRIBUTES_FN_A;
ImpersonateSecurityContext: IMPERSONATE_SECURITY_CONTEXT_FN;
RevertSecurityContext: REVERT_SECURITY_CONTEXT_FN;
MakeSignature: MAKE_SIGNATURE_FN;
VerifySignature: VERIFY_SIGNATURE_FN;
FreeContextBuffer: FREE_CONTEXT_BUFFER_FN;
QuerySecurityPackageInfoA: QUERY_SECURITY_PACKAGE_INFO_FN_A;
Reserved3: PVOID;
Reserved4: PVOID;
ExportSecurityContext: EXPORT_SECURITY_CONTEXT_FN;
ImportSecurityContextA: IMPORT_SECURITY_CONTEXT_FN_A;
AddCredentialsA : ADD_CREDENTIALS_FN_A;
Reserved8: PVOID;
QuerySecurityContextToken: QUERY_SECURITY_CONTEXT_TOKEN_FN;
EncryptMessage: ENCRYPT_MESSAGE_FN;
DecryptMessage: DECRYPT_MESSAGE_FN;
end;
{$IFDEF SSPI_UNICODE}
SecurityFunctionTable = SecurityFunctionTableW;
PSecurityFunctionTable = PSecurityFunctionTableW;
{$ELSE}
SecurityFunctionTable = SecurityFunctionTableA;
PSecurityFunctionTable = PSecurityFunctionTableA;
{$ENDIF}
const
SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION = 1;
type
INIT_SECURITY_INTERFACE_A = function // InitSecurityInterfaceA
: PSecurityFunctionTableA; stdcall;
INIT_SECURITY_INTERFACE_W = function // InitSecurityInterfaceW
: PSecurityFunctionTableW; stdcall;
{$IFDEF SSPI_UNICODE}
INIT_SECURITY_INTERFACE = INIT_SECURITY_INTERFACE_W;
{$ELSE}
INIT_SECURITY_INTERFACE = INIT_SECURITY_INTERFACE_A;
{$ENDIF}
{ TODO : SASL Profile Support }
(*
//
// SASL Profile Support
//
SECURITY_STATUS
SEC_ENTRY
SaslEnumerateProfilesA(
OUT LPSTR * ProfileList,
OUT ULONG * ProfileCount
);
SECURITY_STATUS
SEC_ENTRY
SaslEnumerateProfilesW(
OUT LPWSTR * ProfileList,
OUT ULONG * ProfileCount
);
#ifdef UNICODE
#define SaslEnumerateProfiles SaslEnumerateProfilesW
#else
#define SaslEnumerateProfiles SaslEnumerateProfilesA
#endif
SECURITY_STATUS
SEC_ENTRY
SaslGetProfilePackageA(
IN LPSTR ProfileName,
OUT PSecPkgInfoA * PackageInfo
);
SECURITY_STATUS
SEC_ENTRY
SaslGetProfilePackageW(
IN LPWSTR ProfileName,
OUT PSecPkgInfoW * PackageInfo
);
#ifdef UNICODE
#define SaslGetProfilePackage SaslGetProfilePackageW
#else
#define SaslGetProfilePackage SaslGetProfilePackageA
#endif
SECURITY_STATUS
SEC_ENTRY
SaslIdentifyPackageA(
IN PSecBufferDesc pInput,
OUT PSecPkgInfoA * PackageInfo
);
SECURITY_STATUS
SEC_ENTRY
SaslIdentifyPackageW(
IN PSecBufferDesc pInput,
OUT PSecPkgInfoW * PackageInfo
);
#ifdef UNICODE
#define SaslIdentifyPackage SaslIdentifyPackageW
#else
#define SaslIdentifyPackage SaslIdentifyPackageA
#endif
SECURITY_STATUS
SEC_ENTRY
SaslInitializeSecurityContextW(
PCredHandle phCredential, // Cred to base context
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -