/*++

Copyright (c) 1999, Microsoft Corporation

Module Name:

    natapip.h

Abstract:

    This module contains private declarations for the NAT's I/O interface
    to the kernel-mode driver.

Author:

    Abolade Gbadegesin (aboladeg)   16-Jun-1999

Revision History:

--*/

#ifndef _NATAPI_NATAPIP_H_
#define _NATAPI_NATAPIP_H_

#ifdef __cplusplus
extern "C" {
#endif

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))

#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

#ifndef REFERENCE_OBJECT
#define REFERENCE_OBJECT(x,deleted) \
    (deleted(x) ? FALSE : (InterlockedIncrement(&(x)->ReferenceCount), TRUE))
#endif

#ifndef DEREFERENCE_OBJECT
#define DEREFERENCE_OBJECT(x,cleanup) \
    (InterlockedDecrement(&(x)->ReferenceCount) ? TRUE : (cleanup(x), FALSE))
#endif

VOID
NatCloseDriver(
    HANDLE FileHandle
    );

ULONG
NatLoadDriver(
    OUT PHANDLE FileHandle,
    PIP_NAT_GLOBAL_INFO GlobalInfo
    );

ULONG
NatOpenDriver(
    OUT PHANDLE FileHandle
    );

ULONG
NatUnloadDriver(
    HANDLE FileHandle
    );

#ifdef __cplusplus
}
#endif

#endif // _NATAPI_NATAPIP_H_