📄 jwanetsh.pas
字号:
{******************************************************************************}
{ }
{ Net Shell API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: netsh.h, released August 2001. The original Pascal }
{ code is: NetSh.pas, released December 2001. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaNetSh;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "netsh.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
JwaWinNT, JwaWinType;
// This file contains definitions which are needed by all NetSh helper DLLs.
//
// Error codes
//
const
NETSH_ERROR_BASE = 15000;
{$EXTERNALSYM NETSH_ERROR_BASE}
ERROR_NO_ENTRIES = (NETSH_ERROR_BASE + 0);
{$EXTERNALSYM ERROR_NO_ENTRIES}
ERROR_INVALID_SYNTAX = (NETSH_ERROR_BASE + 1);
{$EXTERNALSYM ERROR_INVALID_SYNTAX}
ERROR_PROTOCOL_NOT_IN_TRANSPORT = (NETSH_ERROR_BASE + 2);
{$EXTERNALSYM ERROR_PROTOCOL_NOT_IN_TRANSPORT}
ERROR_NO_CHANGE = (NETSH_ERROR_BASE + 3);
{$EXTERNALSYM ERROR_NO_CHANGE}
ERROR_CMD_NOT_FOUND = (NETSH_ERROR_BASE + 4);
{$EXTERNALSYM ERROR_CMD_NOT_FOUND}
ERROR_ENTRY_PT_NOT_FOUND = (NETSH_ERROR_BASE + 5);
{$EXTERNALSYM ERROR_ENTRY_PT_NOT_FOUND}
ERROR_DLL_LOAD_FAILED = (NETSH_ERROR_BASE + 6);
{$EXTERNALSYM ERROR_DLL_LOAD_FAILED}
ERROR_INIT_DISPLAY = (NETSH_ERROR_BASE + 7);
{$EXTERNALSYM ERROR_INIT_DISPLAY}
ERROR_TAG_ALREADY_PRESENT = (NETSH_ERROR_BASE + 8);
{$EXTERNALSYM ERROR_TAG_ALREADY_PRESENT}
ERROR_INVALID_OPTION_TAG = (NETSH_ERROR_BASE + 9);
{$EXTERNALSYM ERROR_INVALID_OPTION_TAG}
ERROR_NO_TAG = (NETSH_ERROR_BASE + 10);
{$EXTERNALSYM ERROR_NO_TAG}
ERROR_MISSING_OPTION = (NETSH_ERROR_BASE + 11);
{$EXTERNALSYM ERROR_MISSING_OPTION}
ERROR_TRANSPORT_NOT_PRESENT = (NETSH_ERROR_BASE + 12);
{$EXTERNALSYM ERROR_TRANSPORT_NOT_PRESENT}
ERROR_SHOW_USAGE = (NETSH_ERROR_BASE + 13);
{$EXTERNALSYM ERROR_SHOW_USAGE}
ERROR_INVALID_OPTION_VALUE = (NETSH_ERROR_BASE + 14);
{$EXTERNALSYM ERROR_INVALID_OPTION_VALUE}
ERROR_OKAY = (NETSH_ERROR_BASE + 15);
{$EXTERNALSYM ERROR_OKAY}
ERROR_CONTINUE_IN_PARENT_CONTEXT = (NETSH_ERROR_BASE + 16);
{$EXTERNALSYM ERROR_CONTINUE_IN_PARENT_CONTEXT}
ERROR_SUPPRESS_OUTPUT = (NETSH_ERROR_BASE + 17);
{$EXTERNALSYM ERROR_SUPPRESS_OUTPUT}
ERROR_HELPER_ALREADY_REGISTERED = (NETSH_ERROR_BASE + 18);
{$EXTERNALSYM ERROR_HELPER_ALREADY_REGISTERED}
ERROR_CONTEXT_ALREADY_REGISTERED = (NETSH_ERROR_BASE + 19);
{$EXTERNALSYM ERROR_CONTEXT_ALREADY_REGISTERED}
NETSH_ERROR_END = ERROR_CONTEXT_ALREADY_REGISTERED;
{$EXTERNALSYM NETSH_ERROR_END}
// Flags
type
NS_CMD_FLAGS = DWORD;
{$EXTERNALSYM NS_CMD_FLAGS}
TNsCmdFlags = NS_CMD_FLAGS;
const
CMD_FLAG_PRIVATE = $01; // not valid in sub-contexts
{$EXTERNALSYM CMD_FLAG_PRIVATE}
CMD_FLAG_INTERACTIVE = $02; // not valid from outside netsh
{$EXTERNALSYM CMD_FLAG_INTERACTIVE}
CMD_FLAG_LOCAL = $08; // not valid from a remote machine
{$EXTERNALSYM CMD_FLAG_LOCAL}
CMD_FLAG_ONLINE = $10; // not valid in offline/non-commit mode
{$EXTERNALSYM CMD_FLAG_ONLINE}
CMD_FLAG_HIDDEN = $20; // hide from help but allow execution
{$EXTERNALSYM CMD_FLAG_HIDDEN}
CMD_FLAG_LIMIT_MASK = $ffff;
{$EXTERNALSYM CMD_FLAG_LIMIT_MASK}
CMD_FLAG_PRIORITY = DWORD($80000000); // ulPriority field is used*/
{$EXTERNALSYM CMD_FLAG_PRIORITY}
type
NS_REQS = (
NS_REQ_ZERO,
NS_REQ_PRESENT,
NS_REQ_ALLOW_MULTIPLE,
NS_REQ_ONE_OR_MORE);
{$EXTERNALSYM NS_REQS}
TNsReqs = NS_REQS;
NS_EVENTS = DWORD;
{$EXTERNALSYM NS_EVENTS}
TNsEvents = NS_EVENTS;
const
NS_EVENT_LOOP = $00010000;
{$EXTERNALSYM NS_EVENT_LOOP}
NS_EVENT_LAST_N = $00000001;
{$EXTERNALSYM NS_EVENT_LAST_N}
NS_EVENT_LAST_SECS = $00000002;
{$EXTERNALSYM NS_EVENT_LAST_SECS}
NS_EVENT_FROM_N = $00000004;
{$EXTERNALSYM NS_EVENT_FROM_N}
NS_EVENT_FROM_START = $00000008;
{$EXTERNALSYM NS_EVENT_FROM_START}
type
NS_MODE_CHANGE = (
NETSH_COMMIT,
NETSH_UNCOMMIT,
NETSH_FLUSH,
NETSH_COMMIT_STATE,
NETSH_SAVE);
{$EXTERNALSYM NS_MODE_CHANGE}
TNsModeChange = NS_MODE_CHANGE;
const
NS_GET_EVENT_IDS_FN_NAME = 'GetEventIds';
{$EXTERNALSYM NS_GET_EVENT_IDS_FN_NAME}
// todo where is MAX_DLL_NAME
// MAX_NAME_LEN = MAX_DLL_NAME;
// {$EXTERNALSYM MAX_NAME_LEN}
NETSH_VERSION_50 = $0005000;
{$EXTERNALSYM NETSH_VERSION_50}
NETSH_ARG_DELIMITER = WideString('=');
{$EXTERNALSYM NETSH_ARG_DELIMITER}
NETSH_CMD_DELIMITER = WideString(' ');
{$EXTERNALSYM NETSH_CMD_DELIMITER}
NETSH_MAX_TOKEN_LENGTH = 64;
{$EXTERNALSYM NETSH_MAX_TOKEN_LENGTH}
NETSH_MAX_CMD_TOKEN_LENGTH = 128;
{$EXTERNALSYM NETSH_MAX_CMD_TOKEN_LENGTH}
NETSH_ROOT_GUID: TGUID = (
D1: 0; D2: 0; D3: 0; D4: (0, 0, 0, 0, 0, 0, 0, 0));
{$EXTERNALSYM NETSH_ROOT_GUID}
DEFAULT_CONTEXT_PRIORITY = 100;
{$EXTERNALSYM DEFAULT_CONTEXT_PRIORITY}
type
PTOKEN_VALUE = ^TOKEN_VALUE;
{$EXTERNALSYM PTOKEN_VALUE}
_TOKEN_VALUE = record
pwszToken: LPCWSTR; // literal token string
dwValue: DWORD; // ID of info string
end;
{$EXTERNALSYM _TOKEN_VALUE}
TOKEN_VALUE = _TOKEN_VALUE;
{$EXTERNALSYM TOKEN_VALUE}
TTokenValue = TOKEN_VALUE;
PTokenValue = PTOKEN_VALUE;
// Macros
(* TODO
#define CREATE_CMD_ENTRY(t,f) {CMD_##t, f, HLP_##t, HLP_##t##_EX, CMD_FLAG_PRIVATE, NULL}
#define CREATE_CMD_ENTRY_EX(t,f,i) {CMD_##t, f, HLP_##t, HLP_##t##_EX, i, NULL}
#define CREATE_CMD_ENTRY_EX_VER(t,f,i,v) {CMD_##t, f, HLP_##t, HLP_##t##_EX, i, v}
#define CREATE_CMD_GROUP_ENTRY(t,s) {CMD_##t, HLP_##t, sizeof(s)/sizeof(CMD_ENTRY), 0, s, NULL }
#define CREATE_CMD_GROUP_ENTRY_EX(t,s,i) {CMD_##t, HLP_##t, sizeof(s)/sizeof(CMD_ENTRY), i, s, NULL }
#define CREATE_CMD_GROUP_ENTRY_EX_VER(t,s,i,v) {CMD_##t, HLP_##t, sizeof(s)/sizeof(CMD_ENTRY), i, s, v }
#define NUM_TOKENS_IN_TABLE(TokenArray) sizeof(TokenArray)/sizeof(TOKEN_VALUE)
#define NUM_TAGS_IN_TABLE(TagsArray) sizeof(TagsArray)/sizeof(TAG_TYPE)
*)
// Callbacks
type
NS_CONTEXT_COMMIT_FN = function (dwAction: DWORD): DWORD; stdcall;
{$EXTERNALSYM NS_CONTEXT_COMMIT_FN}
PNS_CONTEXT_COMMIT_FN = ^NS_CONTEXT_COMMIT_FN;
{$EXTERNALSYM PNS_CONTEXT_COMMIT_FN}
TNsContextCommitFn = NS_CONTEXT_COMMIT_FN;
PNsContextCommitFn = PNS_CONTEXT_COMMIT_FN;
NS_CONTEXT_CONNECT_FN = function (pwszMachine: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM NS_CONTEXT_CONNECT_FN}
PNS_CONTEXT_CONNECT_FN = ^NS_CONTEXT_CONNECT_FN;
{$EXTERNALSYM PNS_CONTEXT_CONNECT_FN}
TNsContextConnextFn = NS_CONTEXT_CONNECT_FN;
PNsContextConnextFn = PNS_CONTEXT_CONNECT_FN;
NS_CONTEXT_DUMP_FN = function (pwszRouter: LPCWSTR; var ppwcArguments: LPWSTR; dwArgCount: DWORD; pvData: LPCVOID): DWORD; stdcall;
{$EXTERNALSYM NS_CONTEXT_DUMP_FN}
PNS_CONTEXT_DUMP_FN = ^NS_CONTEXT_DUMP_FN;
{$EXTERNALSYM PNS_CONTEXT_DUMP_FN}
TNsContextDumpFn = NS_CONTEXT_DUMP_FN;
PNsContextDumpFn = PNS_CONTEXT_DUMP_FN;
NS_DLL_STOP_FN = function (dwReserved: DWORD): DWORD; stdcall;
{$EXTERNALSYM NS_DLL_STOP_FN}
PNS_DLL_STOP_FN = ^NS_DLL_STOP_FN;
{$EXTERNALSYM PNS_DLL_STOP_FN}
TNsDllStopFn = NS_DLL_STOP_FN;
PNsDllStopFn = PNS_DLL_STOP_FN;
NS_HELPER_START_FN = function (const pguidParent: TGUID; dwVersion: DWORD): DWORD; stdcall;
{$EXTERNALSYM NS_HELPER_START_FN}
PNS_HELPER_START_FN = NS_HELPER_START_FN;
{$EXTERNALSYM PNS_HELPER_START_FN}
TNsHelperStartFn = NS_HELPER_START_FN;
PNsHelperStartFn = PNS_HELPER_START_FN;
NS_HELPER_STOP_FN = function (dwReserved: DWORD): DWORD; stdcall;
{$EXTERNALSYM NS_HELPER_STOP_FN}
PNS_HELPER_STOP_FN = ^NS_HELPER_STOP_FN;
{$EXTERNALSYM PNS_HELPER_STOP_FN}
TNsHelperStopFn = NS_HELPER_STOP_FN;
PNsHelperStopFn = PNS_HELPER_STOP_FN;
FN_HANDLE_CMD = function (pwszMachine: LPCWSTR; var ppwcArguments: LPWSTR; dwCurrentIndex, dwArgCount,
dwFlags: DWORD; pvData: LPCVOID; var pbDone: BOOL): DWORD; stdcall;
{$EXTERNALSYM FN_HANDLE_CMD}
PFN_HANDLE_CMD = ^FN_HANDLE_CMD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -