Files
yttrium-virtio-gpu/NetKVM/CoInstaller/NetKVMCo.h
T
Yuri Benditovich af78b83bad netkvmko: replace netsh.h includes with own ones
netkvmco.h becomes interface file between static lib and the
application that uses it. The application should call start
and stop procedures of the helper and resolve missing
procedures that previously were in netsh.lib

Signed-off-by: Yuri Benditovich <[email protected]>
2023-09-26 09:21:39 +02:00

131 lines
4.4 KiB
C

#pragma once
typedef
DWORD
(WINAPI NS_HELPER_START_FN)(
_In_ CONST GUID* pguidParent,
_In_ DWORD dwVersion
);
typedef NS_HELPER_START_FN* PNS_HELPER_START_FN;
typedef
DWORD
(WINAPI NS_HELPER_STOP_FN)(
_In_ DWORD dwReserved
);
typedef NS_HELPER_STOP_FN* PNS_HELPER_STOP_FN;
typedef struct _NS_HELPER_ATTRIBUTES
{
union
{
struct
{
DWORD dwVersion;
DWORD dwReserved;
};
ULONGLONG _ullAlign;
};
GUID guidHelper; // GUID associated with the helper
PNS_HELPER_START_FN pfnStart; // Function to start this helper
PNS_HELPER_STOP_FN pfnStop; // Function to stop this helper
} NS_HELPER_ATTRIBUTES, * PNS_HELPER_ATTRIBUTES;
typedef
DWORD
(WINAPI NS_CONTEXT_DUMP_FN)(
IN LPCWSTR pwszRouter,
_In_reads_(dwArgCount) LPWSTR* ppwcArguments,
_In_ DWORD dwArgCount,
IN LPCVOID pvData
);
typedef NS_CONTEXT_DUMP_FN* PNS_CONTEXT_DUMP_FN;
#pragma warning(disable:4201)
typedef struct _NS_CONTEXT_ATTRIBUTES
{
union
{
struct
{
DWORD dwVersion;
DWORD dwReserved;
};
ULONGLONG _ullAlign;
};
LPWSTR pwszContext; // Name of the context
GUID guidHelper; // GUID of the helper servicing this context
DWORD dwFlags; // Flags limiting when context is available. (See CMD_FLAG_xxx)
ULONG ulPriority; // Priority field is only relevant if CMD_FLAG_PRIORITY is set in dwFlags
ULONG ulNumTopCmds; // Number of top-level commands
struct _CMD_ENTRY(*pTopCmds)[]; // Array of top-level commands
ULONG ulNumGroups; // Number of command groups
struct _CMD_GROUP_ENTRY(*pCmdGroups)[]; // Array of command groups
PNS_CONTEXT_DUMP_FN pfnDumpFn;
PVOID pReserved;
} NS_CONTEXT_ATTRIBUTES, * PNS_CONTEXT_ATTRIBUTES;
typedef DWORD(FN_HANDLE_CMD)(
IN LPCWSTR pwszMachine,
_Inout_updates_(dwArgCount) LPWSTR* ppwcArguments,
IN DWORD dwCurrentIndex,
IN DWORD dwArgCount,
IN DWORD dwFlags,
IN LPCVOID pvData,
OUT BOOL* pbDone
);
typedef FN_HANDLE_CMD* PFN_HANDLE_CMD;
typedef struct _CMD_ENTRY
{
LPCWSTR pwszCmdToken; // The token for the command
PFN_HANDLE_CMD pfnCmdHandler; // The function which handles this command
DWORD dwShortCmdHelpToken; // The short help message
DWORD dwCmdHlpToken; // The message to display if the only thing after the command is a help token (HELP, /?, -?, ?)
DWORD dwFlags; // Flags (see CMD_FLAGS_xxx above)
PVOID pOsVersionCheck; // Check for the version of the OS this command can run against
} CMD_ENTRY, * PCMD_ENTRY;
typedef struct _CMD_GROUP_ENTRY
{
LPCWSTR pwszCmdGroupToken; // The token for the command verb
DWORD dwShortCmdHelpToken; // The message to display in a command listing.
ULONG ulCmdGroupSize; // The number of entries in the cmd table
DWORD dwFlags; // Flags (see CMD_FLAG_xxx)
PCMD_ENTRY pCmdGroup; // The command table
PVOID pOsVersionCheck; // Check for the version of the OS this command can run against
} CMD_GROUP_ENTRY, * PCMD_GROUP_ENTRY;
typedef enum _NS_REQS
{
NS_REQ_ZERO = 0,
NS_REQ_PRESENT = 1,
NS_REQ_ALLOW_MULTIPLE = 2,
NS_REQ_ONE_OR_MORE = 3
} NS_REQS;
typedef struct _TAG_TYPE
{
LPCWSTR pwszTag; // tag string
DWORD dwRequired; // required or not
BOOL bPresent; // present or not
} TAG_TYPE, * PTAG_TYPE;
void PrintError(HMODULE, UINT ResourceId);
void PrintMessageFromModule(HMODULE, UINT ResourceId);
DWORD PreprocessCommand(HANDLE, LPWSTR* ppwcArguments, DWORD dwCurrentIndex,
DWORD dwArgCount, TAG_TYPE* pttTags, DWORD dwTagCount, DWORD dwMinArgs,
DWORD dwMaxArgs, DWORD* pdwTagType);
DWORD RegisterContext(IN CONST NS_CONTEXT_ATTRIBUTES* pChildContext);
// both parameters are dummy
DWORD WINAPI NetKVMNetshStartHelper(const GUID*, DWORD);
// the parameter is dummy
DWORD WINAPI NetKVMNetshStopHelper(DWORD);