📄 jwaauthif.pas
字号:
//
// Routines exported by a RADIUS extension DLL.
//
//
// RadiusExtensionInit is optional. If it exists, it will be invoked prior to
// the service coming on-line. A return value other than NO_ERROR prevents the
// service from initializing.
//
const
RADIUS_EXTENSION_INIT = 'RadiusExtensionInit';
{$EXTERNALSYM RADIUS_EXTENSION_INIT}
type
PRADIUS_EXTENSION_INIT = function: DWORD; stdcall;
{$EXTERNALSYM PRADIUS_EXTENSION_INIT}
PRadiusExtensionInit = PRADIUS_EXTENSION_INIT;
//
// RadiusExtensionTerm is optional. If it exists, it will be invoked prior to
// unloading the DLL to give the extension a chance to clean-up.
//
const
RADIUS_EXTENSION_TERM = 'RadiusExtensionTerm';
{$EXTERNALSYM RADIUS_EXTENSION_TERM}
type
PRADIUS_EXTENSION_TERM = procedure; stdcall;
{$EXTERNALSYM PRADIUS_EXTENSION_TERM}
PRadiusExtensionTerm = PRADIUS_EXTENSION_TERM;
//
// RadiusExtensionProcess is mandatory for NT4. For Windows 2000, an
// extension may export RadiusExtensionProcessEx (q.v.) instead.
//
// Parameters:
// pAttrs Array of attributes from the request. It is terminated by an
// attribute with dwAttrType set to ratMinimum. These attributes
// should be treated as read-only and must not be referenced
// after the function returns.
// pfAction For Access-Requests, this parameter will be non-NULL with
// *pfAction == raContinue. The extension DLL can set *pfAction
// to abort further processing and force an Access-Accept or
// Access-Reject. For all other request types, this parameter
// will be NULL.
//
// Return Value:
// A return value other than NO_ERROR causes the request to be discarded.
//
const
RADIUS_EXTENSION_PROCESS = 'RadiusExtensionProcess';
{$EXTERNALSYM RADIUS_EXTENSION_PROCESS}
type
PRADIUS_EXTENSION_PROCESS = function (pAttrs: PRADIUS_ATTRIBUTE; pfAction: PRADIUS_ACTION): DWORD; stdcall;
{$EXTERNALSYM PRADIUS_EXTENSION_PROCESS}
PRadiusExtensionProcess = PRADIUS_EXTENSION_PROCESS;
//
// RadiusExtensionProcessEx is only supported on Windows 2000. If it exits,
// RadiusExtensionProcess is ignored.
//
// Parameters:
// pInAttrs Array of attributes from the request. It is terminated by an
// attribute with dwAttrType set to ratMinimum. These attributes
// should be treated as read-only and must not be referenced
// after the function returns.
// pOutAttrs Array of attributes to add to the response. It is terminated
// by an attribute with dwAttrType set to ratMinimum.
// *pOutAttrs may be set to NULL if no attributes are returned.
// pfAction For Access-Requests, this parameter will be non-NULL with
// *pfAction == raContinue. The extension DLL can set *pfAction
// to abort further processing and force an Access-Accept or
// Access-Reject. For all other request types, this parameter
// will be NULL.
//
// Return Value:
// A return value other than NO_ERROR causes the request to be discarded.
//
const
RADIUS_EXTENSION_PROCESS_EX = 'RadiusExtensionProcessEx';
{$EXTERNALSYM RADIUS_EXTENSION_PROCESS_EX}
type
PRADIUS_EXTENSION_PROCESS_EX = function (pInAttrs: PRADIUS_ATTRIBUTE;
pOutAttrs: PRADIUS_ATTRIBUTE; pfAction: PRADIUS_ACTION): DWORD; stdcall;
{$EXTERNALSYM PRADIUS_EXTENSION_PROCESS_EX}
PRadiusExtensionProcessEx = PRADIUS_EXTENSION_PROCESS_EX;
//
// RadiusExtensionFreeAttributes must be defined if RadiusExtensionProcessEx
// is defined. It is used to free the attributes returned by
// RadiusExtensionProcessEx
//
// Parameters:
// pAttrs Array of attributes to be freed.
//
const
RADIUS_EXTENSION_FREE_ATTRIBUTES = 'RadiusExtensionFreeAttributes';
{$EXTERNALSYM RADIUS_EXTENSION_FREE_ATTRIBUTES}
type
PRADIUS_EXTENSION_FREE_ATTRIBUTES = procedure (pAttrs: PRADIUS_ATTRIBUTE); stdcall;
{$EXTERNALSYM PRADIUS_EXTENSION_FREE_ATTRIBUTES}
PRadiusExtensionFreeAttributes = PRADIUS_EXTENSION_FREE_ATTRIBUTES;
//
// Defines used for installation of an extension DLL.
// The following registry values are used for loading extensions:
//
// HKLM\System\CurrentControlSet\Services\AuthSrv\Parameters
// ExtensionDLLs (REG_MULTI_SZ) <list of DLL paths>
// AuthorizationDLLs (REG_MULTI_SZ) <list of DLL paths>
//
// ExtensionDLLs are invoked before any of the built-in authentication
// providers. They receive all the attributes from the request plus all
// the extended attribute types.
//
// AuthorizationDLLs are invoked after the built-in authentication and
// authorization providers. They receive all the attributes from the
// response plus all the extended attributes types. AuthorizationDLLs may
// not return an action of raAccept.
//
const
AUTHSRV_PARAMETERS_KEY_W = WideString('System\CurrentControlSet\Services\AuthSrv\Parameters');
{$EXTERNALSYM AUTHSRV_PARAMETERS_KEY_W}
AUTHSRV_EXTENSIONS_VALUE_W = WideString('ExtensionDLLs');
{$EXTERNALSYM AUTHSRV_EXTENSIONS_VALUE_W}
AUTHSRV_AUTHORIZATION_VALUE_W = WideString('AuthorizationDLLs');
{$EXTERNALSYM AUTHSRV_AUTHORIZATION_VALUE_W}
// #if _WIN32_WINNT >= 0x0501
// Version of this spec.
const
RADIUS_EXTENSION_VERSION = 1;
{$EXTERNALSYM RADIUS_EXTENSION_VERSION}
//
// Enumerates the different points during request processing where an
// extension can be invoked.
//
type
_RADIUS_EXTENSION_POINT = (
repAuthentication, // ExtensionDLLs
repAuthorization); // AuthorizationDLLs
{$EXTERNALSYM _RADIUS_EXTENSION_POINT}
RADIUS_EXTENSION_POINT = _RADIUS_EXTENSION_POINT;
{$EXTERNALSYM RADIUS_EXTENSION_POINT}
TRadiusExtensionPoint = RADIUS_EXTENSION_POINT;
//
// Struct representing an array of RADIUS_ATTRIBUTE structs. All the functions
// for adding attributes to a request copy the supplied memory, so there is no
// need for the extension to export RadiusExtensionFreeAttributes. The
// extension must not modify this struct. All changes must be made by using the
// supplied callback functions.
//
PRADIUS_ATTRIBUTE_ARRAY = ^RADIUS_ATTRIBUTE_ARRAY;
{$EXTERNALSYM PRADIUS_ATTRIBUTE_ARRAY}
PPRADIUS_ATTRIBUTE_ARRAY = ^PRADIUS_ATTRIBUTE_ARRAY;
_RADIUS_ATTRIBUTE_ARRAY = record
// Size of this structure in bytes.
cbSize: DWORD;
// Adds a new attribute to the end of the array.
Add: function (This: PRADIUS_ATTRIBUTE_ARRAY; pAttr: PRADIUS_ATTRIBUTE): DWORD; stdcall;
//
// Returns a const pointer to the specified attribute within the array or
// NULL if the index is out of range.
//
AttributeAt: function (This: PPRADIUS_ATTRIBUTE_ARRAY; dwIndex: DWORD): PRADIUS_ATTRIBUTE; stdcall;
//
// Returns the size of the array. Since indexes are zero-based, the size is
// 1 greater than the largest index.
//
GetSize: function (This: PRADIUS_ATTRIBUTE_ARRAY): DWORD; stdcall;
//
// Inserts a new attribute at a specified index in the array. In the
// process, it shifts up (by incrementing the index) the existing attribute
// at this index, and it shifts up all the attributes above it. Returns
// ERROR_INVALID_PARAMETER if the index is out of range.
//
InsertAt: function (This: PRADIUS_ATTRIBUTE_ARRAY; dwIndex: DWORD; pAttr: PRADIUS_ATTRIBUTE): DWORD; stdcall;
//
// Removes the attribute at the specified index in the array. In the
// process, it shifts down all the attributes above the removed attribute.
// Returns ERROR_ACCESS_DENIED if the specified attribute is read-only.
// Returns ERROR_INVALID_PARAMETER if the index is out of range.
//
RemoveAt: function (This: PRADIUS_ATTRIBUTE_ARRAY; dwIndex: DWORD): DWORD; stdcall;
//
// Sets the array element at the specified index, replacing the existing
// attribute. Returns ERROR_INVALID_PARAMETER if the index is out of range.
//
SetAt: function (This: PPRADIUS_ATTRIBUTE_ARRAY; dwIndex: DWORD; pAttr: PRADIUS_ATTRIBUTE): DWORD; stdcall;
end;
{$EXTERNALSYM _RADIUS_ATTRIBUTE_ARRAY}
RADIUS_ATTRIBUTE_ARRAY = _RADIUS_ATTRIBUTE_ARRAY;
{$EXTERNALSYM RADIUS_ATTRIBUTE_ARRAY}
TRadiusAttributeArray = RADIUS_ATTRIBUTE_ARRAY;
PRadiusAttributeArray = PRADIUS_ATTRIBUTE_ARRAY;
//
// Struct used to exchange information with the extension during request
// processing. The extension must not modify this struct. All changes must be
// made by using the supplied callback functions.
//
PRADIUS_EXTENSION_CONTROL_BLOCK = ^RADIUS_EXTENSION_CONTROL_BLOCK;
{$EXTERNALSYM PRADIUS_EXTENSION_CONTROL_BLOCK}
_RADIUS_EXTENSION_CONTROL_BLOCK = record
// Size of this structure.
cbSize: DWORD;
// Version info of this specification.
dwVersion: DWORD;
// Point during request processing where the extension is being invoked.
repPoint: RADIUS_EXTENSION_POINT;
// Type of RADIUS request being processed.
rcRequestType: RADIUS_CODE;
//
// Final disposition of the request. This field must not be modified
// directly; use the SetResponseType callback function instead. At the
// repAuthentication point, this may be set to rcUnknown to indicate that no
// decision has been made yet.
//
rcResponseType: RADIUS_CODE;
//
// Returns the attributes received in the RADIUS request and any internal
// attributes describing the request state. The extenstion can modify the
// request attributes. For example, when IAS is acting as a RADIUS proxy, an
// extension could filter which attributes are forwarded to a remote RADIUS
// server.
//
GetRequest: function (This: PRADIUS_EXTENSION_CONTROL_BLOCK): PRADIUS_ATTRIBUTE_ARRAY; stdcall;
//
// Returns the attributes that will be sent in the response if the final
// outcome of request processing matches the specified response type.
// Returns NULL if rcResponseType is invalid. Note that an extension may
// retrieve and modify the attributes for any valid response type regardless
// of the request's current disposition. For example, an extension can set
// the response type to rcAccessAccept, but still add attributes to the
// Access-Reject in case the response type is overridden during further
// processing.
//
GetResponse: function (This: PRADIUS_EXTENSION_CONTROL_BLOCK; rcResponseType: RADIUS_CODE): PRADIUS_ATTRIBUTE_ARRAY; stdcall;
//
// Sets the final disposition of the request.
// Returns ERROR_INVALID_PARAMETER if the specified response type is invalid
// for the request type.
//
SetResponseType: function (This: PRADIUS_EXTENSION_CONTROL_BLOCK; rcResponseType: RADIUS_CODE): DWORD; stdcall;
end;
{$EXTERNALSYM _RADIUS_EXTENSION_CONTROL_BLOCK}
RADIUS_EXTENSION_CONTROL_BLOCK = _RADIUS_EXTENSION_CONTROL_BLOCK;
{$EXTERNALSYM RADIUS_EXTENSION_CONTROL_BLOCK}
TRadiusExtensionControlBlock = RADIUS_EXTENSION_CONTROL_BLOCK;
PRadiusExtensionControlBlock = PRADIUS_EXTENSION_CONTROL_BLOCK;
//
// If RadiusExtensionProcess2 exists, RadiusExtensionProcess and
// RadiusExtensionProcessEx are ignored.
//
// Parameters:
// pECB Info exchanged with the extension.
//
// Return Value:
// A return value other than NO_ERROR causes the request to be discarded.
///
const
RADIUS_EXTENSION_PROCESS2 = 'RadiusExtensionProcess2';
{$EXTERNALSYM RADIUS_EXTENSION_PROCESS2}
type
PRADIUS_EXTENSION_PROCESS_2 = function (pECB: PRADIUS_EXTENSION_CONTROL_BLOCK): DWORD; stdcall;
{$EXTERNALSYM PRADIUS_EXTENSION_PROCESS_2}
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -