318 lines
6.4 KiB
C
318 lines
6.4 KiB
C
/*++
|
||
|
||
Copyright (c) 1989 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
bowser.h
|
||
|
||
Abstract:
|
||
|
||
This module is the main header file for the NT redirector file
|
||
system.
|
||
|
||
Author:
|
||
|
||
Darryl Havens (darrylh) 29-Jun-1989
|
||
Larry Osterman (larryo) 06-May-1991
|
||
|
||
|
||
Revision History:
|
||
|
||
|
||
--*/
|
||
|
||
|
||
#ifndef _BOWSER_
|
||
#define _BOWSER_
|
||
|
||
#ifndef BOWSERDBG
|
||
#define BOWSERDBG 0
|
||
#endif
|
||
//
|
||
//
|
||
// Global include file definitions
|
||
//
|
||
//
|
||
|
||
|
||
#include <ntddbrow.h> // Browser FSCTL defs.
|
||
|
||
#include <lmcons.h> // Include global network constants
|
||
|
||
#include <tdikrnl.h>
|
||
|
||
#include <tdi.h>
|
||
|
||
#include <smbtypes.h>
|
||
#include <smb.h>
|
||
#include <smbtrans.h>
|
||
#include <smbgtpt.h>
|
||
#include <smbipx.h>
|
||
|
||
#include <hostannc.h> // Host announcement structures.
|
||
#include <lmserver.h>
|
||
|
||
|
||
|
||
//
|
||
//
|
||
// Separate include file definitions
|
||
//
|
||
//
|
||
//
|
||
|
||
#include "bowpub.h" // Public bowser definitions.
|
||
|
||
#include "bowtypes.h" // Bowser structure type definitions.
|
||
|
||
#include <bowdbg.h> // Debugging definitions.
|
||
|
||
#include "workque.h" // FSP/FSD worker queue functions.
|
||
|
||
#include "bowdata.h" // Global data variables.
|
||
|
||
#include "fspdisp.h" // Global FSP dispatch definitions.
|
||
|
||
#include "fsddisp.h" // Global FSP dispatch definitions.
|
||
|
||
#include "domain.h" // Domain emulation specific definitions.
|
||
|
||
#include "bowname.h" // Bowser name structure definitions.
|
||
|
||
#include "bowtimer.h" // Timer related routines
|
||
|
||
#include "bowtdi.h" // Bowser TDI specific definitions.
|
||
|
||
#include "receive.h" // Bowser receive engine code.
|
||
|
||
#include "announce.h" // Announcement related stuff
|
||
|
||
#include "mailslot.h" // Mailslot specific routines
|
||
|
||
#include "bowelect.h" // Election routines
|
||
|
||
#include "bowmastr.h" // Master related routines.
|
||
|
||
#include "bowbackp.h" // Backup related routines.
|
||
|
||
#include "brsrvlst.h" // Definitions for browser server list.
|
||
|
||
#include "bowipx.h"
|
||
|
||
#include "bowsecur.h" // definitions for security
|
||
|
||
#include <wchar.h> // CRT wide character routines
|
||
|
||
#include "..\rdbss\smb.mrx\ntbowsif.h"
|
||
|
||
//++
|
||
//
|
||
// VOID
|
||
// BowserCompleteRequest (
|
||
// IN PIRP Irp,
|
||
// IN NTSTATUS Status
|
||
// );
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This routine is used to complete an IRP with the indicated
|
||
// status. It does the necessary raise and lower of IRQL.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// Irp - Supplies a pointer to the Irp to complete
|
||
//
|
||
// Status - Supplies the completion status for the Irp
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
#define BowserCompleteRequest(IRP,STATUS) { \
|
||
(IRP)->IoStatus.Status = (STATUS); \
|
||
if (NT_ERROR((STATUS))) { \
|
||
(IRP)->IoStatus.Information = 0; \
|
||
} \
|
||
IoCompleteRequest( (IRP), 0 ); \
|
||
}
|
||
|
||
|
||
|
||
//
|
||
// The following macros are used to establish the semantics needed
|
||
// to do a return from within a try-finally clause. As a rule every
|
||
// try clause must end with a label call try_exit. For example,
|
||
//
|
||
// try {
|
||
// :
|
||
// :
|
||
//
|
||
// try_exit: NOTHING;
|
||
// } finally {
|
||
//
|
||
// :
|
||
// :
|
||
// }
|
||
//
|
||
// Every return statement executed inside of a try clause should use the
|
||
// try_return macro. If the compiler fully supports the try-finally construct
|
||
// then the macro should be
|
||
//
|
||
// #define try_return(S) { return(S); }
|
||
//
|
||
// If the compiler does not support the try-finally construct then the macro
|
||
// should be
|
||
//
|
||
#define try_return(S) { S; goto try_exit; }
|
||
//
|
||
|
||
//
|
||
// This macro returns TRUE if a flag in a set of flags is on and FALSE
|
||
// otherwise. It is followed by two macros for setting and clearing
|
||
// flags
|
||
//
|
||
|
||
//#ifndef BooleanFlagOn
|
||
//#define BooleanFlagOn(Flags,SingleFlag) ((BOOLEAN)((((Flags) & (SingleFlag)) != 0)))
|
||
//#endif
|
||
|
||
//#ifndef SetFlag
|
||
//#define SetFlag(Flags,SingleFlag) { \
|
||
// (Flags) |= (SingleFlag); \
|
||
//}
|
||
//#endif
|
||
|
||
//#ifndef ClearFlag
|
||
//#define ClearFlag(Flags,SingleFlag) { \
|
||
// (Flags) &= ~(SingleFlag); \
|
||
//}
|
||
//#endif
|
||
|
||
#ifdef _M_IX86
|
||
#define INLINE _inline
|
||
#else
|
||
#define INLINE
|
||
#endif
|
||
|
||
_inline BOOLEAN
|
||
IsZeroTerminated(
|
||
IN PSZ String,
|
||
IN ULONG MaximumStringLength
|
||
)
|
||
// Return TRUE if a zero terminator exists on String.
|
||
{
|
||
while ( MaximumStringLength-- ) {
|
||
if (*String++ == 0 ) {
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
NTSTATUS
|
||
BowserStopProcessingAnnouncements(
|
||
IN PTRANSPORT_NAME TransportName,
|
||
IN PVOID Context
|
||
);
|
||
|
||
BOOLEAN
|
||
BowserMapUsersBuffer (
|
||
IN PIRP Irp,
|
||
OUT PVOID *UserBuffer,
|
||
IN ULONG Length
|
||
);
|
||
|
||
NTSTATUS
|
||
BowserLockUsersBuffer (
|
||
IN PIRP Irp,
|
||
IN LOCK_OPERATION Operation,
|
||
IN ULONG BufferLength
|
||
);
|
||
|
||
NTSTATUS
|
||
BowserConvertType3IoControlToType2IoControl (
|
||
IN PIRP Irp,
|
||
IN PIO_STACK_LOCATION IrpSp
|
||
);
|
||
|
||
ULONG
|
||
BowserPackNtString(
|
||
PUNICODE_STRING string,
|
||
ULONG_PTR BufferDisplacement,
|
||
PCHAR dataend,
|
||
PCHAR * laststring
|
||
);
|
||
|
||
ULONG
|
||
BowserPackUnicodeString(
|
||
IN OUT PWSTR * string, // pointer by reference: string to be copied.
|
||
IN ULONG StringLength, // Length of this string.
|
||
IN ULONG_PTR OutputBufferDisplacement, // Amount to subtract from output buffer
|
||
IN PVOID dataend, // pointer to end of fixed size data.
|
||
IN OUT PVOID * laststring // pointer by reference: top of string data.
|
||
);
|
||
|
||
ULONG
|
||
BowserTimeUp(
|
||
VOID
|
||
);
|
||
|
||
ULONG
|
||
BowserRandom(
|
||
ULONG MaxValue
|
||
);
|
||
|
||
VOID
|
||
_cdecl
|
||
BowserWriteErrorLogEntry(
|
||
IN ULONG UniqueErrorCode,
|
||
IN NTSTATUS NtStatusCode,
|
||
IN PVOID ExtraInformationBuffer,
|
||
IN USHORT ExtraInformationLength,
|
||
IN USHORT NumberOfInsertionStrings,
|
||
...
|
||
);
|
||
|
||
VOID
|
||
BowserLogIllegalName(
|
||
IN NTSTATUS NtStatusCode,
|
||
IN PVOID NameBuffer,
|
||
IN USHORT NameBufferSize
|
||
);
|
||
|
||
VOID
|
||
BowserInitializeFsd(
|
||
VOID
|
||
);
|
||
|
||
VOID
|
||
BowserReferenceDiscardableCode(
|
||
DISCARDABLE_SECTION_NAME SectionName
|
||
);
|
||
|
||
VOID
|
||
BowserDereferenceDiscardableCode(
|
||
DISCARDABLE_SECTION_NAME SectionName
|
||
);
|
||
VOID
|
||
BowserInitializeDiscardableCode(
|
||
VOID
|
||
);
|
||
|
||
VOID
|
||
BowserUninitializeDiscardableCode(
|
||
VOID
|
||
);
|
||
|
||
NTSTATUS
|
||
BowserStartElection(
|
||
IN PTRANSPORT Transport
|
||
);
|
||
|
||
|
||
#endif // _BOWSER_
|