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_
|