⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jwanetsh.pas

📁 比较全面的win32api开发包
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  {$EXTERNALSYM PFN_HANDLE_CMD}
  TFnHandleCmd = FN_HANDLE_CMD;
  PFnHandleCmd = PFN_HANDLE_CMD;

  NS_OSVERSIONCHECK = function (CIMOSType, CIMOSProductSuite: UINT; CIMOSVersion, CIMOSBuildNumber, CIMServicePackMajorVersion,
    CIMServicePackMinorVersion: LPCWSTR; CIMProcessorArchitecture: UINT; dwReserved: DWORD): BOOL; stdcall;
  {$EXTERNALSYM NS_OSVERSIONCHECK}
  PNS_OSVERSIONCHECK = ^NS_OSVERSIONCHECK;
  {$EXTERNALSYM PNS_OSVERSIONCHECK}
  TNsOSVersionCheck = NS_OSVERSIONCHECK;
  PNsOSVersionCheck = PNS_OSVERSIONCHECK;  

// Structures

  _NS_HELPER_ATTRIBUTES = record
    Union: record
    case Integer of
      0: (
        dwVersion: DWORD;
        dwReserved: DWORD);
      1: (
        _ullAlign: ULONGLONG);
    end;
    guidHelper: TGUID;                        // GUID associated with the helper
    pfnStart: PNS_HELPER_START_FN;            // Function to start this helper
    pfnStop: PNS_HELPER_STOP_FN;              // Function to stop this helper
  end;
  {$EXTERNALSYM _NS_HELPER_ATTRIBUTES}
  NS_HELPER_ATTRIBUTES = _NS_HELPER_ATTRIBUTES;
  {$EXTERNALSYM NS_HELPER_ATTRIBUTES}
  PNS_HELPER_ATTRIBUTES = ^NS_HELPER_ATTRIBUTES;
  {$EXTERNALSYM PNS_HELPER_ATTRIBUTES}
  TNsHelperAttributes = NS_HELPER_ATTRIBUTES;
  PNsHelperAttributes = PNS_HELPER_ATTRIBUTES;

  PCMD_ENTRY = ^CMD_ENTRY;
  {$EXTERNALSYM PCMD_ENTRY}
  _CMD_ENTRY = record
    pwszCmdToken: LPCWSTR; // The token for the command
    pfnCmdHandler: PFN_HANDLE_CMD; // The function which handles this command
    dwShortCmdHelpToken: DWORD; // The short help message
    dwCmdHlpToken: DWORD; // The message to display if the only thing after the command is a help token (HELP, /?, -?, ?)
    dwFlags: DWORD; // Flags (see CMD_FLAGS_xxx above)
    pOsVersionCheck: PNS_OSVERSIONCHECK; // Check for the version of the OS this command can run against
  end;
  {$EXTERNALSYM _CMD_ENTRY}
  CMD_ENTRY = _CMD_ENTRY;
  {$EXTERNALSYM CMD_ENTRY}
  TCmdEntry = CMD_ENTRY;
  PCmdEntry = PCMD_ENTRY;

  PCMD_GROUP_ENTRY = ^CMD_GROUP_ENTRY;
  {$EXTERNALSYM PCMD_GROUP_ENTRY}
  _CMD_GROUP_ENTRY = record
    pwszCmdGroupToken: LPCWSTR; // The token for the command verb
    dwShortCmdHelpToken: DWORD; // The message to display in a command listing.
    ulCmdGroupSize: ULONG; // The number of entries in the cmd table
    dwFlags: DWORD; // Flags (see CMD_FLAG_xxx)
    pCmdGroup: PCMD_ENTRY; // The command table
    pOsVersionCheck: PNS_OSVERSIONCHECK; // Check for the version of the OS this command can run against
  end;
  {$EXTERNALSYM _CMD_GROUP_ENTRY}
  CMD_GROUP_ENTRY = _CMD_GROUP_ENTRY;
  {$EXTERNALSYM CMD_GROUP_ENTRY}
  TCmdGroupEntry = CMD_GROUP_ENTRY;
  PCmdGroupEntry = PCMD_GROUP_ENTRY;

  _NS_CONTEXT_ATTRIBUTES = record
    Union: record
    case Integer of
      0: (
        dwVersion: DWORD;
        dwReserved: DWORD);
      1: (
        _ullAlign: ULONGLONG);
    end;
    pwszContext: LPWSTR;          // Name of the context
    guidHelper: TGUID;            // GUID of the helper servicing this context
    dwFlags: DWORD;               // Flags limiting when context is available. (See CMD_FLAG_xxx)
    ulPriority: ULONG;            // Priority field is only relevant if CMD_FLAG_PRIORITY is set in dwFlags
    ulNumTopCmds: ULONG;          // Number of top-level commands
    pTopCmds: PCMD_ENTRY;         // Array of top-level commands
    ulNumGroups: ULONG;           // Number of command groups
    pCmdGroups: PCMD_GROUP_ENTRY; // Array of command groups

    pfnCommitFn: PNS_CONTEXT_COMMIT_FN;
    pfnDumpFn: PNS_CONTEXT_DUMP_FN;
    pfnConnectFn: PNS_CONTEXT_CONNECT_FN;
    pReserved: PVOID;
    pfnOsVersionCheck: PNS_OSVERSIONCHECK;
  end;
  {$EXTERNALSYM _NS_CONTEXT_ATTRIBUTES}
  NS_CONTEXT_ATTRIBUTES = _NS_CONTEXT_ATTRIBUTES;
  {$EXTERNALSYM NS_CONTEXT_ATTRIBUTES}
  PNS_CONTEXT_ATTRIBUTES = ^NS_CONTEXT_ATTRIBUTES;
  {$EXTERNALSYM PNS_CONTEXT_ATTRIBUTES}
  TNsContextAttributes = NS_CONTEXT_ATTRIBUTES;
  PNsContextAttributes = PNS_CONTEXT_ATTRIBUTES;  

  PCNS_CONTEXT_ATTRIBUTES = ^_NS_CONTEXT_ATTRIBUTES;
  {$EXTERNALSYM PCNS_CONTEXT_ATTRIBUTES}

  PTAG_TYPE = ^TAG_TYPE;
  {$EXTERNALSYM PTAG_TYPE}
  _TAG_TYPE = record
    pwszTag: LPCWSTR;  // tag string
    dwRequired: DWORD; // required or not
    bPresent: BOOL;    // present or not
  end;
  {$EXTERNALSYM _TAG_TYPE}
  TAG_TYPE = _TAG_TYPE;
  {$EXTERNALSYM TAG_TYPE}
  TTagType = TAG_TYPE;
  PTagType = PTAG_TYPE;

type
  NS_DLL_INIT_FN = function (dwNetshVersion: DWORD; pReserved: PVOID): DWORD; stdcall;
  {$EXTERNALSYM NS_DLL_INIT_FN}
  PNS_DLL_INIT_FN = ^NS_DLL_INIT_FN;
  {$EXTERNALSYM PNS_DLL_INIT_FN}
  TNdDllInitFn = NS_DLL_INIT_FN;
  PNdDllInitFn = PNS_DLL_INIT_FN;

// Exports

function GetHostMachineInfo(var puiCIMOSType, puiCIMOSProductSuite: UINT; pszCIMOSVersion, pszCIMOSBuildNumber,
  pszCIMServicePackMajorVersion, pszCIMServicePackMinorVersion: LPWSTR; var puiCIMProcessorArchitecture: UINT): DWORD; stdcall;
{$EXTERNALSYM GetHostMachineInfo}
function MatchEnumTag(hModule: HANDLE; pwcArg: LPCWSTR; dwNumArg: DWORD; pEnumTable: PTOKEN_VALUE; pdwValue: PDWORD): DWORD; stdcall;
{$EXTERNALSYM MatchEnumTag}
function MatchToken(pwszUserToken, pwszCmdToken: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM MatchToken}
function PreprocessCommand(hModule: HANDLE; var ppwcArguments: LPWSTR; dwCurrentIndex, dwArgCount: DWORD; pttTags: PTAG_TYPE;
  dwTagCount, dwMinArgs, dwMaxArgs: DWORD; var pdwTagType: DWORD): DWORD; stdcall;
{$EXTERNALSYM PreprocessCommand}

(* TODO
DWORD PrintError(
    IN  HANDLE  hModule, OPTIONAL
    IN  DWORD   dwErrId,
    ...
    );

DWORD PrintMessageFromModule(
    IN  HANDLE  hModule,
    IN  DWORD   dwMsgId,
    ...
    );

DWORD PrintMessage(
    IN  LPCWSTR  pwszFormat,
    ...
    );
*)

function RegisterContext(pChildContext: PNS_CONTEXT_ATTRIBUTES): DWORD; stdcall;
{$EXTERNALSYM RegisterContext}
function RegisterHelper(const pguidParentContext: TGUID; pfnRegisterSubContext: PNS_HELPER_ATTRIBUTES): DWORD; stdcall;
{$EXTERNALSYM RegisterHelper}

implementation

const
  netsh = 'netsh.exe'; 


{$IFDEF DYNAMIC_LINK}
var
  _GetHostMachineInfo: Pointer;

function GetHostMachineInfo;
begin
  GetProcedureAddress(_GetHostMachineInfo, netsh, 'GetHostMachineInfo');
  asm
    mov esp, ebp
    pop ebp
    jmp [_GetHostMachineInfo]
  end;
end;
{$ELSE}
function GetHostMachineInfo; external netsh name 'GetHostMachineInfo';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
  _MatchEnumTag: Pointer;

function MatchEnumTag;
begin
  GetProcedureAddress(_MatchEnumTag, netsh, 'MatchEnumTag');
  asm
    mov esp, ebp
    pop ebp
    jmp [_MatchEnumTag]
  end;
end;
{$ELSE}
function MatchEnumTag; external netsh name 'MatchEnumTag';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
  _MatchToken: Pointer;

function MatchToken;
begin
  GetProcedureAddress(_MatchToken, netsh, 'MatchToken');
  asm
    mov esp, ebp
    pop ebp
    jmp [_MatchToken]
  end;
end;
{$ELSE}
function MatchToken; external netsh name 'MatchToken';
{$ENDIF DYNAMIC_LINK}

{$IFDEF DYNAMIC_LINK}
var
  _PreprocessCommand: Pointer;

function PreprocessCommand;
begin
  GetProcedureAddress(_PreprocessCommand, netsh, 'PreprocessCommand');
  asm
    mov esp, ebp
    pop ebp
    jmp [_PreprocessCommand]
  end;
end;
{$ELSE}
function PreprocessCommand; external netsh name 'PreprocessCommand';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
  _RegisterContext: Pointer;

function RegisterContext;
begin
  GetProcedureAddress(_RegisterContext, netsh, 'RegisterContext');
  asm
    mov esp, ebp
    pop ebp
    jmp [_RegisterContext]
  end;
end;
{$ELSE}
function RegisterContext; external netsh name 'RegisterContext';
{$ENDIF DYNAMIC_LINK}


{$IFDEF DYNAMIC_LINK}
var
  _RegisterHelper: Pointer;

function RegisterHelper;
begin
  GetProcedureAddress(_RegisterHelper, netsh, 'RegisterHelper');
  asm
    mov esp, ebp
    pop ebp
    jmp [_RegisterHelper]
  end;
end;
{$ELSE}
function RegisterHelper; external netsh name 'RegisterHelper';
{$ENDIF DYNAMIC_LINK}

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -