/* * 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 #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_ */