jwalpmapi.pas
来自「比较全面的win32api开发包」· PAS 代码 · 共 1,676 行 · 第 1/4 页
PAS
1,676 行
PETYPE = USHORT;
{$EXTERNALSYM PETYPE}
const
LPM_OK = 0;
{$EXTERNALSYM LPM_OK}
type
MSG_TYPE = Integer;
{$EXTERNALSYM MSG_TYPE}
TMsgType = MSG_TYPE;
rsvpmsgobjs = record
RsvpMsgType: TMsgType;
pRsvpSession: PRsvpSession;
pRsvpFromHop: PRsvpHop;
pRsvpToHop: PRsvpHop;
pResvStyle: PResvStyle;
pRsvpScope: PRsvpScope;
FlowDescCount: Integer;
pFlowDescs: PFlowDesc;
PdObjectCount: Integer;
ppPdObjects: ^PPolicyData;
pErrorSpec: PErrorSpec;
pAdspec: PADSpec;
end;
{$EXTERNALSYM rsvpmsgobjs}
RSVP_MSG_OBJS = rsvpmsgobjs;
{$EXTERNALSYM RSVP_MSG_OBJS}
TRsvpMsgObjs = RSVP_MSG_OBJS;
PRsvpMsgObjs = ^RSVP_MSG_OBJS;
PALLOCMEM = function (Size: DWORD): Pointer; stdcall;
{$EXTERNALSYM PALLOCMEM}
TAllocMem = PALLOCMEM;
PFREEMEM = procedure (pv: Pointer); stdcall;
{$EXTERNALSYM PFREEMEM}
TFreeMem = PFREEMEM;
policy_decision = record
lpvResult: LPV; // Use the LPV values from above
wPolicyErrCode: WORD; // RSVP defined error codes
wPolicyErrValue: WORD; // RSVP defined error values
end;
{$EXTERNALSYM policy_decision}
TPolicyDecision = policy_decision;
PPolicyDecision = ^policy_decision;
CBADMITRESULT = function (LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE;
ulPcmActionFlags: ULONG; LpmError: Integer; PolicyDecisionsCount: Integer;
pPolicyDecisions: PPolicyDecision): ULONG; stdcall;
{$EXTERNALSYM CBADMITRESULT}
TCbAdmitResult = CBADMITRESULT;
CBGETRSVPOBJECTS = function (LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE;
LpmError: Integer; RsvpObjectsCount: Integer; ppRsvpObjects: PPRsvpObjHdr): ULONG; stdcall;
{$EXTERNALSYM CBGETRSVPOBJECTS}
TCbGetRsvpObjects = CBGETRSVPOBJECTS;
// The above 2 call backs can return the following errors
const
INV_LPM_HANDLE = 1; // Supplied LpmHandle is invalid
{$EXTERNALSYM INV_LPM_HANDLE}
LPM_TIME_OUT = 2; // LPM has returned results after the time limit
{$EXTERNALSYM LPM_TIME_OUT}
INV_REQ_HANDLE = 3; // Supplied Request handle is invalid
{$EXTERNALSYM INV_REQ_HANDLE}
DUP_RESULTS = 4; // LPM has already returned results for this request
{$EXTERNALSYM DUP_RESULTS}
INV_RESULTS = 5; // Results supplied are invalid
{$EXTERNALSYM INV_RESULTS}
type
lpminitinfo = record
PcmVersionNumber: DWORD;
ResultTimeLimit: DWORD;
ConfiguredLpmCount: Integer;
AllocMemory: PALLOCMEM;
FreeMemory: PFREEMEM;
PcmAdmitResultCallback: CBADMITRESULT;
GetRsvpObjectsCallback: CBGETRSVPOBJECTS;
end;
{$EXTERNALSYM lpminitinfo}
LPM_INIT_INFO = lpminitinfo;
{$EXTERNALSYM LPM_INIT_INFO}
TLpmInitInfo = LPM_INIT_INFO;
PLpmInitInfo = ^LPM_INIT_INFO;
// Valid PE types
// XXX ISSUE - Is 0xFFFF a better choice?
const
LPM_PE_ALL_TYPES = 0;
{$EXTERNALSYM LPM_PE_ALL_TYPES}
// Current LPM API version number
LPM_API_VERSION_1 = 1;
{$EXTERNALSYM LPM_API_VERSION_1}
// Current PCM version number
PCM_VERSION_1 = 1;
{$EXTERNALSYM PCM_VERSION_1}
function LPM_Initialize(LpmHandle: LPM_HANDLE; const pLpmInitInfo: LPM_INIT_INFO;
var pLpmVersionNumber: DWORD; var pSupportedPeType: PETYPE; Reserved: Pointer): ULONG; stdcall;
{$EXTERNALSYM LPM_Initialize}
(**************************************
LPM_Deinitialize
***************************************)
function LPM_Deinitialize(LpmHandle: LPM_HANDLE): ULONG; stdcall;
{$EXTERNALSYM LPM_Deinitialize}
(**************************************
LPM_AdmitRsvpMsg
***************************************)
// Valid LPV - LPM Priority Values
const
LPV_RESERVED = 0;
{$EXTERNALSYM LPV_RESERVED}
LPV_MIN_PRIORITY = 1;
{$EXTERNALSYM LPV_MIN_PRIORITY}
LPV_MAX_PRIORITY = $FF00;
{$EXTERNALSYM LPV_MAX_PRIORITY}
LPV_DROP_MSG = $FFFD;
{$EXTERNALSYM LPV_DROP_MSG}
LPV_DONT_CARE = $FFFE;
{$EXTERNALSYM LPV_DONT_CARE}
LPV_REJECT = $FFFF;
{$EXTERNALSYM LPV_REJECT}
// Valid values for PcmActionFlags
FORCE_IMMEDIATE_REFRESH = 1;
{$EXTERNALSYM FORCE_IMMEDIATE_REFRESH}
// Function return values for LPM_AdmitResvMsg
LPM_RESULT_READY = 0;
{$EXTERNALSYM LPM_RESULT_READY}
LPM_RESULT_DEFER = 1;
{$EXTERNALSYM LPM_RESULT_DEFER}
function LPM_AdmitRsvpMsg(PcmReqHandle: RHANDLE; const pRecvdIntf: RSVP_HOP;
const pRsvpMsgObjs: RSVP_MSG_OBJS; RcvdRsvpMsgLength: Integer; RcvdRsvpMsg: PUCHAR;
var pulPcmActionFlags: ULONG; pPolicyDecisions: PPolicyDecision; Reserved: Pointer): ULONG; stdcall;
{$EXTERNALSYM LPM_AdmitRsvpMsg}
(**************************************
LPM_GetRsvpObjects
***************************************)
// Function return values are defined in LPM_AdmitResvMsg section
function LPM_GetRsvpObjects(PcmReqHandle: RHANDLE; MaxPdSize: ULONG;
SendingIntfAddr: PRsvpHop; pRsvpMsgObjs: PRsvpMsgObjs; var pRsvpObjectsCount: Integer;
var pppRsvpObjects: PRsvpObjHdr; Reserved: Pointer): ULONG; stdcall;
{$EXTERNALSYM LPM_GetRsvpObjects}
(**************************************
LPM_DeleteState
***************************************)
// TearDown reasons
const
RCVD_PATH_TEAR = 1;
{$EXTERNALSYM RCVD_PATH_TEAR}
RCVD_RESV_TEAR = 2;
{$EXTERNALSYM RCVD_RESV_TEAR}
ADM_CTRL_FAILED = 3;
{$EXTERNALSYM ADM_CTRL_FAILED}
STATE_TIMEOUT = 4;
{$EXTERNALSYM STATE_TIMEOUT}
FLOW_DURATION = 5;
{$EXTERNALSYM FLOW_DURATION}
procedure LPM_DeleteState(pRcvdIfAddr: PRsvpHop; RsvpMsgType: TMsgType;
pRsvpSession: PRsvpSession; pRsvpFromHop: PRsvpHop; pResvStyle: PResvStyle;
FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec; TearDownReason: Integer); stdcall;
{$EXTERNALSYM LPM_DeleteState}
(**************************************
LPM_IpAddrTable
***************************************)
type
lpmiptable = record
ulIfIndex: ULONG; // SNMP index for this interface
MediaType: ULONG; // As defined in IPIFCONS.H
IfIpAddr: IN_ADDR; // Interface IP address
IfNetMask: IN_ADDR; // Interface subnet mask
end;
{$EXTERNALSYM lpmiptable}
TLpmIpTable = lpmiptable;
PLpmIpTable = ^lpmiptable;
function LPM_IpAddressTable(cIpAddrTable: ULONG; pIpAddrTable: PLpmIpTable): BOOL; stdcall;
{$EXTERNALSYM LPM_IpAddressTable}
(**************************************
LPM_CommitResv
***************************************)
// CommitDecision values
const
RESOURCES_ALLOCATED = 1;
{$EXTERNALSYM RESOURCES_ALLOCATED}
RESOURCES_MODIFIED = 2;
{$EXTERNALSYM RESOURCES_MODIFIED}
procedure LPM_CommitResv(RsvpSession: PRsvpSession; FlowInstalledIntf: PRsvpHop;
RsvpStyle: PResvStyle; FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec;
pMergedFlowSpec: PIsFlowSpec; CommitDecision: ULONG); stdcall;
{$EXTERNALSYM LPM_CommitResv}
implementation
function ObjLength(const x: TRsvpObjHdr): USHORT;
begin
Result := x.obj_length;
end;
function ObjCType(const x: TRsvpObjHdr): UCHAR;
begin
Result := x.obj_ctype;
end;
function ObjClass(const x: TRsvpObjHdr): UCHAR;
begin
Result := x.obj_class;
end;
function ObjData(const x: TRsvpObjHdr): Pointer;
begin
Result := Pointer(Integer(@x) + SizeOf(x));
end;
function Style_is_Wildcard(p: DWORD): Boolean;
begin
Result := (p and Opt_SndSel_mask) = Opt_Wildcard;
end;
function Style_is_Shared(p: DWORD): Boolean;
begin
Result := (p and Opt_Share_mask) = Opt_Shared;
end;
function Error_Usage(x: DWORD): DWORD;
begin
Result := (x shr 12) and 3;
end;
function Intserv_Version(x: DWORD): DWORD;
begin
Result := (x and INTSERV_VERS_MASK) shr 4;
end;
function Intserv_Version_OK(const x: TIntServMainHdr): Boolean;
begin
Result := (x.ismh_version and INTSERV_VERS_MASK) = INTSERV_VERSION0;
end;
function Intserv_Obj_size(const x: TIntServMainHdr): DWORD;
begin
Result := x.ismh_len32b * 4 + SizeOf(IntServMainHdr) + SizeOf(RsvpObjHdr);
end;
function Issh_len32b(const p: TIntServServiceHdr): USHORT;
begin
Result := p.issh_len32b;
end;
const
lpmlib = 'msidlpm.dll';
{$IFDEF DYNAMIC_LINK}
var
_LPM_Initialize: Pointer;
function LPM_Initialize;
begin
GetProcedureAddress(_LPM_Initialize, lpmlib, 'LPM_Initialize');
asm
mov esp, ebp
pop ebp
jmp [_LPM_Initialize]
end;
end;
{$ELSE}
function LPM_Initialize; external lpmlib name 'LPM_Initialize';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_LPM_Deinitialize: Pointer;
function LPM_Deinitialize;
begin
GetProcedureAddress(_LPM_Deinitialize, lpmlib, 'LPM_Deinitialize');
asm
mov esp, ebp
pop ebp
jmp [_LPM_Deinitialize]
end;
end;
{$ELSE}
function LPM_Deinitialize; external lpmlib name 'LPM_Deinitialize';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_LPM_AdmitRsvpMsg: Pointer;
function LPM_AdmitRsvpMsg;
begin
GetProcedureAddress(_LPM_AdmitRsvpMsg, lpmlib, 'LPM_AdmitRsvpMsg');
asm
mov esp, ebp
pop ebp
jmp [_LPM_AdmitRsvpMsg]
end;
end;
{$ELSE}
function LPM_AdmitRsvpMsg; external lpmlib name 'LPM_AdmitRsvpMsg';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_LPM_GetRsvpObjects: Pointer;
function LPM_GetRsvpObjects;
begin
GetProcedureAddress(_LPM_GetRsvpObjects, lpmlib, 'LPM_GetRsvpObjects');
asm
mov esp, ebp
pop ebp
jmp [_LPM_GetRsvpObjects]
end;
end;
{$ELSE}
function LPM_GetRsvpObjects; external lpmlib name 'LPM_GetRsvpObjects';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_LPM_DeleteState: Pointer;
procedure LPM_DeleteState;
begin
GetProcedureAddress(_LPM_DeleteState, lpmlib, 'LPM_DeleteState');
asm
mov esp, ebp
pop ebp
jmp [_LPM_DeleteState]
end;
end;
{$ELSE}
procedure LPM_DeleteState; external lpmlib name 'LPM_DeleteState';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_LPM_IpAddressTable: Pointer;
function LPM_IpAddressTable;
begin
GetProcedureAddress(_LPM_IpAddressTable, lpmlib, 'LPM_IpAddressTable');
asm
mov esp, ebp
pop ebp
jmp [_LPM_IpAddressTable]
end;
end;
{$ELSE}
function LPM_IpAddressTable; external lpmlib name 'LPM_IpAddressTable';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_LPM_CommitResv: Pointer;
procedure LPM_CommitResv;
begin
GetProcedureAddress(_LPM_CommitResv, lpmlib, 'LPM_CommitResv');
asm
mov esp, ebp
pop ebp
jmp [_LPM_CommitResv]
end;
end;
{$ELSE}
procedure LPM_CommitResv; external lpmlib name 'LPM_CommitResv';
{$ENDIF DYNAMIC_LINK}
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?