reactos/sdk/include/ddk/netioddk.h

159 lines
4.3 KiB
C

/*
* netioddk.h
*
* This file is part of the ReactOS DDK package.
*
* Contributors:
* Amine Khaldi (amine.khaldi@reactos.org)
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef _NETIODDK_
#define _NETIODDK_
#pragma once
#include <netiodef.h>
#ifdef __cplusplus
extern "C" {
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
typedef CONST struct _NPI_CLIENT_CHARACTERISTICS * PNPI_CLIENT_CHARACTERISTICS;
typedef CONST struct _NPI_PROVIDER_CHARACTERISTICS * PNPI_PROVIDER_CHARACTERISTICS;
typedef CONST struct _NPI_REGISTRATION_INSTANCE * PNPI_REGISTRATION_INSTANCE;
typedef struct _NPI_REGISTRATION_INSTANCE {
USHORT Version;
USHORT Size;
PNPIID NpiId;
PNPI_MODULEID ModuleId;
ULONG Number;
CONST VOID *NpiSpecificCharacteristics OPTIONAL;
} NPI_REGISTRATION_INSTANCE;
typedef struct _NPI {
HANDLE Handle;
CONST VOID* Dispatch;
} NPI;
typedef NTSTATUS
(NTAPI NPI_CLIENT_ATTACH_PROVIDER_FN)(
_In_ HANDLE NmrBindingHandle,
_In_ PVOID ClientContext,
_In_ PNPI_REGISTRATION_INSTANCE ProviderRegistrationInstance);
typedef NPI_CLIENT_ATTACH_PROVIDER_FN *PNPI_CLIENT_ATTACH_PROVIDER_FN;
typedef NTSTATUS
(NTAPI NPI_CLIENT_DETACH_PROVIDER_FN )(
_In_ PVOID ClientBindingContext);
typedef NPI_CLIENT_DETACH_PROVIDER_FN *PNPI_CLIENT_DETACH_PROVIDER_FN;
typedef VOID
(NTAPI NPI_CLIENT_CLEANUP_BINDING_CONTEXT_FN)(
_In_ PVOID ClientBindingContext);
typedef NPI_CLIENT_CLEANUP_BINDING_CONTEXT_FN *PNPI_CLIENT_CLEANUP_BINDING_CONTEXT_FN;
typedef struct _NPI_CLIENT_CHARACTERISTICS {
USHORT Version;
USHORT Length;
PNPI_CLIENT_ATTACH_PROVIDER_FN ClientAttachProvider;
PNPI_CLIENT_DETACH_PROVIDER_FN ClientDetachProvider;
PNPI_CLIENT_CLEANUP_BINDING_CONTEXT_FN ClientCleanupBindingContext;
NPI_REGISTRATION_INSTANCE ClientRegistrationInstance;
} NPI_CLIENT_CHARACTERISTICS;
typedef NTSTATUS
(NTAPI NPI_PROVIDER_ATTACH_CLIENT_FN)(
_In_ HANDLE NmrBindingHandle,
_In_ PVOID ProviderContext,
_In_ PNPI_REGISTRATION_INSTANCE ClientRegistrationInstance,
_In_ PVOID ClientBindingContext,
_In_ CONST VOID *ClientDispatch,
_Out_ PVOID *ProviderBindingContext,
_Out_ CONST VOID* *ProviderDispatch);
typedef NPI_PROVIDER_ATTACH_CLIENT_FN *PNPI_PROVIDER_ATTACH_CLIENT_FN;
typedef NTSTATUS
(NTAPI NPI_PROVIDER_DETACH_CLIENT_FN)(
_In_ PVOID ProviderBindingContext);
typedef NPI_PROVIDER_DETACH_CLIENT_FN *PNPI_PROVIDER_DETACH_CLIENT_FN;
typedef VOID
(NTAPI NPI_PROVIDER_CLEANUP_BINDING_CONTEXT_FN)(
_In_ PVOID ProviderBindingContext);
typedef NPI_PROVIDER_CLEANUP_BINDING_CONTEXT_FN *PNPI_PROVIDER_CLEANUP_BINDING_CONTEXT_FN;
typedef struct _NPI_PROVIDER_CHARACTERISTICS {
USHORT Version;
USHORT Length;
PNPI_PROVIDER_ATTACH_CLIENT_FN ProviderAttachClient;
PNPI_PROVIDER_DETACH_CLIENT_FN ProviderDetachClient;
PNPI_PROVIDER_CLEANUP_BINDING_CONTEXT_FN ProviderCleanupBindingContext;
NPI_REGISTRATION_INSTANCE ProviderRegistrationInstance;
} NPI_PROVIDER_CHARACTERISTICS;
NTSTATUS
NmrRegisterClient(
_In_ PNPI_CLIENT_CHARACTERISTICS ClientCharacteristics,
_In_opt_ __drv_aliasesMem PVOID ClientContext,
_Out_ PHANDLE NmrClientHandle);
NTSTATUS
NmrDeregisterClient(
_In_ HANDLE NmrClientHandle);
NTSTATUS
NmrWaitForClientDeregisterComplete(
_In_ HANDLE NmrClientHandle);
NTSTATUS
NmrClientAttachProvider(
_In_ HANDLE NmrBindingHandle,
_In_ __drv_aliasesMem PVOID ClientBindingContext,
_In_ CONST VOID *ClientDispatch,
_Out_ PVOID *ProviderBindingContext,
_Out_ CONST VOID* *ProviderDispatch);
VOID
NmrClientDetachProviderComplete(
_In_ HANDLE NmrBindingHandle);
NTSTATUS
NmrRegisterProvider(
_In_ PNPI_PROVIDER_CHARACTERISTICS ProviderCharacteristics,
_In_opt_ __drv_aliasesMem PVOID ProviderContext,
_Out_ PHANDLE NmrProviderHandle);
NTSTATUS
NmrDeregisterProvider(
_In_ HANDLE NmrProviderHandle);
NTSTATUS
NmrWaitForProviderDeregisterComplete(
_In_ HANDLE NmrProviderHandle);
VOID
NmrProviderDetachClientComplete(
_In_ HANDLE NmrBindingHandle);
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
#ifdef __cplusplus
}
#endif
#endif /* _NETIODDK_ */