Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
6.3 KiB

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
nettrans.h
Abstract:
This module contains definitions used while exchanging SMB's over the
network
Author:
Larry Osterman (LarryO) 16-Jul-1990
Revision History:
16-Jul-1990 LarryO
Created
--*/
#ifndef _NETTRANS
#define _NETTRANS
struct _MPX_ENTRY;
typedef
NTSTATUS
(*PNETTRANCEIVE_CALLBACK)(
IN PSMB_HEADER Smb,
IN PULONG SmbLength,
IN struct _MPX_ENTRY *MpxTable,
IN PVOID Context,
IN PSERVERLISTENTRY Server,
IN BOOLEAN ErrorIndicator,
IN NTSTATUS NetworkErrorCode OPTIONAL,
IN OUT PIRP *Irp OPTIONAL,
IN ULONG ReceiveFlags
);
#define STANDARD_CALLBACK_HEADER(CallbackRoutineName) \
NTSTATUS \
CallbackRoutineName ( \
IN PSMB_HEADER Smb, \
IN PULONG SmbLength, \
IN struct _MPX_ENTRY *MpxEntry, \
IN PVOID Ctx, \
IN PSERVERLISTENTRY Server, \
IN BOOLEAN ErrorIndicator, \
IN NTSTATUS NetworkErrorCode OPTIONAL, \
IN OUT PIRP *Irp, \
IN ULONG ReceiveFlags \
)
//
// The ERROR_TYPE structure defines the status of a NetTranceive
// request. It can be in one of three states:
//
// NoError - The request has not yet encountered an error.
// NetError - There was a network error (TDI).
// SMBError - The incoming SMB indicated an error.
// ReceiveIrpProcessing - Error processing is postponed.
//
typedef enum _Error_Type {
NoError, // Request was successful
NetError, // Network failure in the request
SMBError, // The incoming SMB indicated an error
ReceiveIrpProcessing // Error processing is postponed
} ERROR_TYPE;
//
// The TRANCEIVE_HEADER structure provides common header information
// for SMB exchanges.
//
typedef struct _TranceiveHeader {
ULONG Type; // Type of context structure.
KEVENT KernelEvent; // Event to wait on for completion
NTSTATUS ErrorCode; // Error if ErrorType != NoError.
ERROR_TYPE ErrorType; // Type of error to wait
ULONG TransferSize; // Used to calculate timeout length.
struct _MPX_ENTRY *MpxTableEntry; // Mpx table entry used for I/O
} TRANCEIVE_HEADER, *PTRANCEIVE_HEADER;
//
// The redirector keeps an array of outstanding requests to the remote
// server. For historical reasons, this table is called an MPX_TABLE
// (or Multiplex Table). Entries in the table are MPX Table Entries,
// and this structure defines those entries.
//
// When a network request is initiated, an MPX table entry is allocated
// and the information needed to track the request is filled in. When
// the response from the remote server arrives, the redirector looks in
// the MPX table entry indicated in the SMB (in the smb_mid field).
//
//
typedef struct _MPX_ENTRY {
ULONG Signature; // Type of structure.
USHORT Mid; // MPX Id of outgoing request.
USHORT Tid;
USHORT Uid; // Save the TID and UID for cancel.
USHORT Pid; // Low 8 bits of the PID for cancel.
ULONG Flags; // Flags describing the request.
ULONG StartTime; // Time to start timeout
ULONG TimeoutTime; // Time to timeout the request.
ULONG TransferSize; // Used to calculate timeout length
ULONG ReferenceCount; // Used to synchronize with cancel
PIRP SendIrp; // I/O request packet for Send.
PIRP ReceiveIrp; // I/O request packet for Receive.
PIRP OriginatingIrp; // I/O request packet for user request.
PIRP SendIrpToFree; // IRP to be freed at end of tranceive.
KEVENT SendCompleteEvent; // Send completion event.
PFILE_OBJECT FileObject; // Used to cancel MTE's for a file.
ERESOURCE_THREAD RequestorsThread; // Thread that initiated I/O.
PSERVERLISTENTRY SLE; // ServerList Entry for request.
PTRANCEIVE_HEADER RequestContext; // Context information about request.
PNETTRANCEIVE_CALLBACK Callback;
} MPX_ENTRY, *PMPX_ENTRY;
typedef struct _MPX_TABLE {
PMPX_ENTRY Entry; // Actual entry.
USHORT Mid; // Mpx ID for entry
} MPX_TABLE, *PMPX_TABLE;
#define MPX_ENTRY_ALLOCATED 0x00000001 // MPX table entry is allocated.
#define MPX_ENTRY_SENDIRPGIVEN 0x00000002 // Send IRP was provided to request
#define MPX_ENTRY_SENDCOMPLETE 0x00000004 // Send completed.
#define MPX_ENTRY_OPLOCK 0x00000008 // This is the oplock MPX entry.
#define MPX_ENTRY_LONGTERM 0x00000010 // This is a longterm request.
#define MPX_ENTRY_ABANDONED 0x00000020 // This has been abandoned.
#define MPX_ENTRY_RECEIVE_GIVEN 0x00000040 // Receive provided to requestor
#define MPX_ENTRY_RECEIVE_COMPLETE 0x00000080 // Receive was completed.
#define MPX_ENTRY_CANCEL_RECEIVE 0x00000100 // Receive needs to be canceled
#define MPX_ENTRY_CANCEL_SEND 0x00000200 // Send needs to be canceled.
#define MPX_ENTRY_CANNOT_CANCEL 0x00000400 // Send cannot be canceled.
#define NT_NORMAL 0x00000000 // This is an "ordinary" exchange.
#define NT_DONTSCROUNGE 0x00000001 // Don't scrounge SMB on send.
#define NT_NOCONNECTLIST 0x00000002 // The connection is invalid.
#define NT_NORESPONSE 0x00000004 // There is no response for this request (T2)
#define NT_NOKNOWSEAS 0x00000008 // This app doesn't knows EAs.
#define NT_NOKNOWSLONGNAMES 0x00000010 // This app doesn't knows Long Names
#define NT_NOSENDRESPONSE 0x00000020 // This is a one-way SMB send.
#define NT_DFSFILE 0x00000040 // This SMB contains a Dfs pathname
#define NT_CANNOTCANCEL 0x08000000 // This request cannot be canceled.
#define NT_PREFER_LONGTERM 0x10000000 // This should be a longterm request if possible.
#define NT_RECONNECTING 0x20000000 // This is the initiation of a connection.
#define NT_LONGTERM 0x40000000 // This is a long term operation.
#define NT_NORECONNECT 0x80000000 // Don't reconnect on this connect
#endif