diff options
Diffstat (limited to 'source/aparser/cifs.struct')
-rw-r--r-- | source/aparser/cifs.struct | 1029 |
1 files changed, 1029 insertions, 0 deletions
diff --git a/source/aparser/cifs.struct b/source/aparser/cifs.struct new file mode 100644 index 00000000000..202f0d7e619 --- /dev/null +++ b/source/aparser/cifs.struct @@ -0,0 +1,1029 @@ +module cifs + +option autoalign False + + +#define BOOL uint32 +#define UCHAR uint8 +#define WCHAR uint16 +#define USHORT uint16 +#define LONG uint32 +#define ULONG uint32 +#define DWORD uint32 +#define SMB_TIME uint16 +#define SMB_DATE uint16 + +typedef struct { + ULONG low; + LONG high; +} TIME; + +typedef struct { + ULONG low; + ULONG high; +} hyper; + +typedef struct { + uint8 cmd; + uint8 reserved; + uint16 offset; +} ANDX_INFO; + + +typedef struct { + uint8 tag2; + STRING protocol; +} BUF2; + +typedef struct { + uint16 bcount; + BUF2 protocol[*]; +} Q_NEGPROT_0; + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 0 Q_NEGPROT_0 q0; + } +} Q_NEGPROT; + +typedef struct { + USHORT DialectIndex; /* Index of selected dialect */ + USHORT SecurityMode; /* Security mode: */ + /* bit 0: 0 = share, 1 = user */ + /* bit 1: 1 = use challenge/response */ + /* authentication */ + USHORT MaxBufferSize; /* Max transmit buffer size (>= 1024) */ + USHORT MaxMpxCount; /* Max pending multiplexed requests */ + USHORT MaxNumberVcs; /* Max VCs between client and server */ + USHORT RawMode; /* Raw modes supported: */ + /* bit 0: 1 = Read Raw supported */ + /* bit 1: 1 = Write Raw supported */ + ULONG SessionKey; /* Unique token identifying this session */ + SMB_TIME ServerTime; /* Current time at server */ + SMB_DATE ServerDate; /* Current date at server */ + USHORT ServerTimeZone; /* Current time zone at server */ + USHORT ChallengeLength; /* Length of Challenge; MBZ if not LM2.1 + /* dialect or later */ + USHORT Reserved; /* MBZ */ + USHORT ByteCount; /* Count of data bytes */ + UCHAR Challenge[ChallengeLength]; /* The challenge */ + STRING PrimaryDomain; /* The server's primary domain */ + +} R_NEGPROT_12; + +typedef struct { + USHORT DialectIndex; /*Index of selected dialect */ + UCHAR SecurityMode; /*Security mode: */ + /* bit 0: 0 = share, 1 = user */ + /* bit 1: 1 = use challenge/response */ + /* authentication */ + /* bit 2: 1 = Security Signatures (SMB integrity */ + /* check) enabled */ + /* bit 3: 1 = Security Signatures (SMB integrity */ + /* check) required */ + USHORT MaxMpxCount; /*Max pending outstanding requests */ + USHORT MaxNumberVcs; /*Max VCs between client and server */ + ULONG MaxBufferSize; /*Max transmit buffer size */ + ULONG MaxRawSize; /*Maximum raw buffer size */ + ULONG SessionKey; /*Unique token identifying this session */ + ULONG Capabilities; /*Server capabilities */ + ULONG SystemTimeLow; /*System (UTC) time of the server (low). */ + ULONG SystemTimeHigh; /*System (UTC) time of the server (high). */ + USHORT ServerTimeZone;/*Time zone of server (minutes from UTC) */ + UCHAR SecurityBlobLength;/*Length of SecurityBlob */ + + USHORT bcount; /*Count of data bytes */ + /*UCHAR GUID[16]; A globally unique identifier assigned to the */ + /* server; present only when */ + /* CAP_EXTENDED_SECURITY is on in the */ + /* Capabilities field. */ + UCHAR SecurityBlob[SecurityBlobLength]; /*Opaque Security Blob associated with the */ + /* security package if CAP_EXTENDED_SECURITY is */ + /* on in the Capabilities field; else challenge */ + /* for CIFS challenge/response authentication. */ + STRING OemDomainName[+]; /*The name of the domain (in OEM chars); not */ + /* present if CAP_EXTENDED_SECURITY is on in the */ + /* Capabilities field */ +} R_NEGPROT_17; + + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 17 R_NEGPROT_17 r17; + } +} R_NEGPROT; + +typedef struct { + uint8 wcount; + uint16 vwv[wcount]; + uint16 bcount; + uint8 none[bcount]; +} Q_TDIS; + +typedef struct { + uint8 wcount; + uint16 vwv[wcount]; + uint16 bcount; + uint8 none[bcount]; +} R_TDIS; + +typedef struct { + ANDX_INFO andx; + uint16 bcount; + uint8 none[bcount]; +} R_ULOGOFF_ANDX_2; + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 2 R_ULOGOFF_ANDX_2 q2; + } +} R_ULOGOFF_ANDX; + +typedef struct { + ANDX_INFO andx; + uint16 bcount; + uint8 none[bcount]; +} Q_ULOGOFF_ANDX_2; + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 2 Q_ULOGOFF_ANDX_2 q2; + } +} Q_ULOGOFF_ANDX; + +typedef struct { + ANDX_INFO andx; + uint16 bufsize; + uint16 max_mpx; + uint16 vc; + ULONG sess_key; + uint16 pwlen; + ULONG reserved; + + uint16 bcount; + uint8 password[pwlen]; + STRING domain; + STRING os; + STRING server; + +} Q_SESSION_SETUP_ANDX_10; + +typedef struct { + ANDX_INFO andx; + uint16 bufsize; + uint16 max_mpx; + uint16 vc; + ULONG sess_key; + uint16 pwlen; + uint16 upwlen; + ULONG capabilities; + ULONG reserved; + + uint16 bcount; + uint8 password[pwlen]; + uint8 upassword[upwlen]; + STRING user; + STRING domain; + STRING os; + STRING server; + +} Q_SESSION_SETUP_ANDX_13; + +typedef struct _Q_SESSION_SETUP_ANDX { + uint8 wcount; + union ctr[wcount] { + case 10 Q_SESSION_SETUP_ANDX_10 q10; + case 13 Q_SESSION_SETUP_ANDX_13 q13; + } +} Q_SESSION_SETUP_ANDX; + +typedef struct { + ANDX_INFO andx; + uint16 vwv2; + uint16 passlen; + uint16 bcount; + uint8 password[passlen]; + STRING path; + STRING device; +} Q_TCON_ANDX_4; + +typedef struct _Q_TCON_ANDX { + uint8 wcount; + union ctr[wcount] { + case 4 Q_TCON_ANDX_4 q4; + } +} Q_TCON_ANDX; + +typedef struct { + ANDX_INFO andx; + uint16 vwv2; + uint16 bcount; + STRING share; +} R_TCON_ANDX_3; + +typedef struct _R_TCON_ANDX { + uint8 wcount; + union ctr[wcount] { + case 3 R_TCON_ANDX_3 q3; + } +} R_TCON_ANDX; + +typedef struct { + ANDX_INFO andx; + uint16 action; + + uint16 count; + STRING os; + STRING server; + STRING domain; +} R_SESSION_SETUP_ANDX_10; + +typedef struct _R_SESSION_SETUP_ANDX { + uint8 wcount; + union ctr[wcount] { + case 3 R_SESSION_SETUP_ANDX_10 r3; + } +} R_SESSION_SETUP_ANDX; + + +typedef struct _R_CLOSE { + uint8 wcount; + uint16 count; + uint8 none[count]; + +} R_CLOSE; + +typedef struct _Q_CLOSE { + uint8 wcount; + uint16 fnum; + uint32 vwv1; + + uint16 count; + uint8 none[count]; + +} Q_CLOSE; + +typedef struct { + uint16 dsize; + uint16 bsizehi; + uint16 bsizelo; + uint16 avail; + uint16 vwv4; + + uint16 bcount; + uint8 none[bcount]; + +} R_DSKATTR_5; + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 5 R_DSKATTR_5 r5; + } +} R_DSKATTR; + +typedef struct { + uint16 count; + uint8 none[count]; + +} Q_DSKATTR_0; + +typedef struct _Q_DSKATTR { + uint8 wcount; + union ctr[wcount] { + case 0 Q_DSKATTR_0 q1; + } + +} Q_DSKATTR; + +typedef struct { + ANDX_INFO andx; + + uint16 bcount; + uint8 none[bcount]; + +} R_LOCKING_2; + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 2 R_LOCKING_2 r2; + } +} R_LOCKING_ANDX; + +/* XXXX must do a switch on bit 0x10 to do large locks XXXX */ +/* LockType Flag Name Value Description */ + +#define LOCKING_ANDX_SHARED_LOCK 0x01 /* Read-only lock */ +#define LOCKING_ANDX_OPLOCK_RELEASE 0x02 /* Oplock break notification */ +#define LOCKING_ANDX_CHANGE_LOCKTYPE 0x04 /* Change lock type */ +#define LOCKING_ANDX_CANCEL_LOCK 0x08 /* Cancel outstanding request */ +#define LOCKING_ANDX_LARGE_FILES 0x10 /* Large file locking format */ + +typedef struct { + USHORT Pid; /* PID of process "owning" lock */ + ULONG Offset; /* Offset to bytes to [un]lock */ + ULONG Length; /* Number of bytes to [un]lock */ +} LOCKING_ANDX_RANGE_SHORT; + +typedef struct { + USHORT Pid; /* PID of process "owning" lock */ + .align4 0; + ULONG OffsetHigh; /* Offset to bytes to [un]lock (high) */ + ULONG OffsetLow; /* Offset to bytes to [un]lock (low) */ + ULONG LengthHigh; /* Number of bytes to [un]lock (high) */ + ULONG LengthLow; /* Number of bytes to [un]lock (low) */ + +} LOCKING_ANDX_RANGE_LARGE; + +/* typedef struct { */ + /* union ctr[LockType&0x10] { */ + /* case 0 LOCKING_ANDX_RANGE_SHORT ls; */ + /* case 0x10 LOCKING_ANDX_RANGE_LARGE ll; */ + /* } */ +/* } LOCKING_ANDX_RANGE; */ + +typedef struct { + ANDX_INFO andx; + + USHORT Fid; /* File handle */ + UCHAR LockType; /* See LockType table below */ + UCHAR OplockLevel; /* The new oplock level */ + ULONG Timeout; /* Milliseconds to wait for unlock */ + USHORT NumberOfUnlocks; /* Num. unlock range structs following */ + USHORT NumberOfLocks; /* Num. lock range structs following */ + + USHORT ByteCount; /* Count of data bytes */ + LOCKING_ANDX_RANGE_SHORT Unlocks[NumberOfUnlocks]; /* Unlock ranges */ + LOCKING_ANDX_RANGE_SHORT Locks[NumberOfLocks]; /* Lock ranges */ + +} Q_LOCKING_8; + +typedef struct _Q_LOCKING { + uint8 wcount; + union ctr[wcount] { + case 8 Q_LOCKING_8 q8; + } + +} Q_LOCKING_ANDX; + + +typedef struct { + uint16 bcount; + uint8 protocols[bcount]; + +} R_UNLINK_0; + +typedef struct { + uint8 wcount; + union ctr[wcount] { + case 0 R_UNLINK_0 r0; + } +} R_UNLINK; + +typedef struct { + uint16 dirtype; + + uint16 count; + uint8 fname[count]; + +} Q_UNLINK_1; + +typedef struct _Q_UNLINK { + uint8 wcount; + union ctr[wcount] { + case 1 Q_UNLINK_1 q1; + } + +} Q_UNLINK; + +typedef struct _R_OPEN_ANDX{ + uint8 wcount; + ANDX_INFO andx; + uint16 fnum; + uint16 fmode; + uint32 mtime; + uint32 size; + uint16 rmode; + uint16 vwv9; + uint16 vwv10; + uint16 smb_action; + uint16 vwv12; + uint16 vwv13; + uint16 vwv14; + + uint16 count; + uint8 none[count]; + +} R_OPEN_ANDX; + +typedef struct _Q_OPEN_ANDX{ + uint8 wcount; + ANDX_INFO andx; + uint16 fnum; + uint16 fmode; + uint32 mtime; + uint32 size; + uint16 rmode; + uint16 vwv9; + uint16 vwv10; + uint16 smb_action; + uint16 vwv12; + uint16 vwv13; + uint16 vwv14; + + uint16 count; + uint8 fname[count]; + +} Q_OPEN_ANDX; + +typedef struct _R_READ_ANDX { + uint8 wcount; + ANDX_INFO andx; + uint16 vwv2; + uint16 vwv3; + uint16 vwv4; + uint16 nread; + uint16 offset; + uint16 vwv7; + uint16 vwv8; + uint16 vwv9; + uint16 vwv10; + uint16 vwv11; + + uint16 count; + uint8 data[count]; + +} R_READ_ANDX; + +typedef struct _Q_READ_ANDX_10 { + ANDX_INFO andx; + uint16 fnum; + uint32 startpos; + uint16 smb_maxcnt; + uint16 smb_mincnt; + uint16 vwv7; + uint16 vwv8; + uint16 vwv9; + + uint16 count; + uint8 none[count]; + +} Q_READ_ANDX_10; + +typedef struct _Q_READ_ANDX_12 { + ANDX_INFO andx; + uint16 fnum; + uint32 startpos; + uint16 smb_maxcnt; + uint16 smb_mincnt; + uint16 vwv7; + uint16 vwv8; + uint16 vwv9; + uint32 startposhi; + + uint16 count; + uint8 none[count]; + +} Q_READ_ANDX_12; + +typedef struct _Q_READ_ANDX { + uint8 wcount; + union ctr[wcount] { + case 10 Q_READ_ANDX_10 q10; + case 12 Q_READ_ANDX_12 q12; + } +} Q_READ_ANDX; + +typedef struct _R_WRITE_ANDX { + uint8 wcount; + ANDX_INFO andx; + uint16 nwritten; + uint16 vwv3; + uint16 vwv4; + uint16 vwv5; + + uint16 count; + uint8 none[count]; + +} R_WRITE_ANDX; + +typedef struct _Q_WRITE_ANDX_12 { + ANDX_INFO andx; + uint16 fnum; + uint32 startpos; + uint16 vwv5; + uint16 vwv6; + uint16 write_through; + uint16 vwv8; + uint16 vwv9; + uint16 numtowrite; + uint16 smb_doff; + + uint16 count; + uint8 data[count]; + +} Q_WRITE_ANDX_12; + +typedef struct _Q_WRITE_ANDX_14 { + ANDX_INFO andx; + uint16 fnum; + uint32 startpos; + uint16 vwv5; + uint16 vwv6; + uint16 write_through; + uint16 vwv8; + uint16 vwv9; + uint16 numtowrite; + uint16 smb_doff; + uint32 startposhi; + + uint16 count; + uint8 data[count]; + +} Q_WRITE_ANDX_14; + +typedef struct _Q_WRITE_ANDX { + uint8 wcount; + union ctr[wcount] { + case 12 Q_WRITE_ANDX_12 q12; + case 14 Q_WRITE_ANDX_14 q14; + } +} Q_WRITE_ANDX; + + + +typedef struct _Q_NTTRANS_19 { + UCHAR MaxSetupCount; /* Max setup words to return */ + USHORT Reserved; + ULONG TotalParameterCount; /* Total parameter bytes being sent */ + ULONG TotalDataCount; /* Total data bytes being sent */ + ULONG MaxParameterCount; /* Max parameter bytes to return */ + ULONG MaxDataCount; /* Max data bytes to return */ + ULONG ParameterCount; /* Parameter bytes sent this buffer */ + ULONG ParameterOffset; /* Offset (from header start) to */ + /* Parameters */ + ULONG DataCount; /* Data bytes sent this buffer */ + ULONG DataOffset; /* Offset (from header start) to data */ + UCHAR SetupCount; /* Count of setup words */ + USHORT Function; /* The transaction function code */ + UCHAR Buffer[1]; + USHORT Setup[SetupCount]; /* Setup words */ + USHORT ByteCount; /* Count of data bytes */ + .align4 0; + UCHAR Parameters[ParameterCount];/* Parameter bytes */ + .align4 0; + UCHAR Data[DataCount]; /* Data bytes */ + +} Q_NTTRANS_19; + +typedef struct _Q_NTTRANS { + uint8 wcount; + union ctr[wcount] { + case 19 Q_NTTRANS_19 q19; + } +} Q_NTTRANS; + +typedef struct _R_NTTRANS_18 { + UCHAR Reserved[3]; + ULONG TotalParameterCount; /* Total parameter bytes being sent */ + ULONG TotalDataCount; /* Total data bytes being sent */ + ULONG ParameterCount; /* Parameter bytes sent this buffer */ + ULONG ParameterOffset; /* Offset (from header start) to */ + /* Parameters */ + ULONG ParameterDisplacement; /* Specifies the offset from the start */ + /* of the overall parameter block to */ + /* the parameter bytes that are */ + /* contained in this message */ + ULONG DataCount; /* Data bytes sent this buffer */ + ULONG DataOffset; /* Offset (from header start) to data */ + ULONG DataDisplacement; /* Specifies the offset from the start */ + /* of the overall data block to the */ + /* data bytes that are contained in */ + /* this message. */ + UCHAR SetupCount; /* Count of setup words */ + USHORT Setup[SetupCount]; /* Setup words */ + USHORT ByteCount; /* Count of data bytes */ + .align4 0; + UCHAR Parameters[ParameterCount]; /* Parameter bytes */ + .align4 0; + UCHAR Data[DataCount]; /* Data bytes */ +} R_NTTRANS_18; + +typedef struct _R_NTTRANS { + uint8 wcount; + union ctr[wcount] { + case 18 R_NTTRANS_18 q18; + } + .align4 2; +} R_NTTRANS; + +/*Setup[0] Transaction2 Value Description */ +/*Subcommand Code */ +/*=============================== ===== ============================= */ + +#define TRANS2_OPEN2 0x00 /* Create file with extended attributes */ +#define TRANS2_FIND_FIRST2 0x01 /* Begin search for files */ +#define TRANS2_FIND_NEXT2 0x02 /* Resume search for files */ +#define TRANS2_QUERY_FS_INFO 0x03 /* Get file system information +#define TRANS2_RESERVED4 0x04 /* Reserved */ +#define TRANS2_QUERY_PATH_INFO 0x05 /* Get information about a named file or directory */ +#define TRANS2_SET_PATH_INFO 0x06 /* Set information about a named file or directory */ +#define TRANS2_QUERY_FILE_INFO 0x07 /* Get information about a handle */ +#define TRANS2_SET_FILE_INFO 0x08 /* Set information by handle */ +#define TRANS2_FSCTL 0x09 /* Not implemented by NT server */ +#define TRANS2_IOCTL2 0x0A /* Not implemented by NT server */ +#define TRANS2_FIND_NOTIFY_FIRST 0x0B /* Not implemented by NT server */ +#define TRANS2_FIND_NOTIFY_NEXT 0x0C /* Not implemented by NT server */ +#define TRANS2_CREATE_DIRECTORY 0x0D /* Create directory with extended attributes */ +#define TRANS2_SESSION_SETUP 0x0E /* Session setup with extended security information */ +#define TRANS2_GET_DFS_REFERRAL 0x10 /* Get a DFS referral */ +#define TRANS2_REPORT_DFS_INCONSISTENCY 0x11 /* Report a DFS knowledge inconsistency */ + +typedef struct { + USHORT InformationLevel; /* Level of information requested */ +} TRANS2_QUERY_FS_INFO_STRUCT; + +#define SMB_INFO_STANDARD 1 +#define SMB_INFO_QUERY_EA_SIZE 2 +#define SMB_SET_FILE_BASIC_INFO 0x101 +#define SMB_SET_FILE_DISPOSITION_INFO 0x102 +#define SMB_SET_FILE_ALLOCATION_INFO 0x103 +#define SMB_SET_FILE_END_OF_FILE_INFO 0x104 + + +typedef struct { + hyper CreationTime; + hyper LastAccessTime; + hyper LastWriteTime; + hyper ChangeTime; + USHORT Attributes; + .align4 0; +} SMB_QUERY_FILE_BASIC_INFO_STRUCT; + + +typedef struct { + ULONG fs_atr; + LONG max_len_filename; + ULONG length; + uint8 fs[length]; + .align4 2; +} SMB_QUERY_FS_ATTRIBUTE_INFO_STRUCT; + +#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 +#define FILE_CASE_PRESERVED_NAMES 0x00000002 +#define FILE_PRSISTENT_ACLS 0x00000004 +#define FILE_FILE_COMPRESSION 0x00000008 +#define FILE_VOLUME_QUOTAS 0x00000010 +#define FILE_DEVICE_IS_MOUNTED 0x00000020 +#define FILE_VOLUME_IS_COMPRESSED 0x00008000 + +typedef struct { + USHORT Fid; + USHORT InformationLevel; + USHORT Reserved; + .align4 0; + + union ctr[InformationLevel] { + case 0x101 SMB_QUERY_FILE_BASIC_INFO_STRUCT t101; + } + +} TRANS2_SET_FILE_INFO_STRUCT; + +typedef struct { + USHORT InformationLevel; /* Level of information requested */ + ULONG Reserved; /* Must be zero */ + STRING FileName; /* File or directory name */ +} TRANS2_QUERY_PATH_INFO_STRUCT; + +typedef struct { + USHORT SearchAttributes; + USHORT SearchCount; + USHORT Flags; + USHORT InformationLevel; + ULONG SearchStorageType; + STRING FileName; +} TRANS2_FIND_FIRST2_STRUCT; + +typedef struct _Q_TRANS2_15 { + USHORT TotalParameterCount; /* Total parameter bytes being sent */ + USHORT TotalDataCount; /* Total data bytes being sent */ + USHORT MaxParameterCount; /* Max parameter bytes to return */ + USHORT MaxDataCount; /* Max data bytes to return */ + UCHAR MaxSetupCount; /* Max setup words to return */ + UCHAR Reserved; + USHORT Flags; /* Additional information: */ + /* bit 0 - also disconnect TID in TID */ + ULONG Timeout; + USHORT Reserved2; + USHORT ParameterCount; /* Parameter bytes sent this buffer */ + USHORT ParameterOffset; /* Offset (from header start) to */ + /* Parameters */ + USHORT DataCount; /* Data bytes sent this buffer */ + USHORT DataOffset; /* Offset (from header start) to data */ + UCHAR SetupCount; /* Count of setup words */ + UCHAR Reserved3; /* Reserved (pad above to word) */ + USHORT Setup[SetupCount]; /* Setup words (# = SetupWordCount) */ + USHORT ByteCount; /* Count of data bytes */ + .align4 0; + union ctr[Setup[0]] { + case 1 TRANS2_FIND_FIRST2_STRUCT t1; + case 3 TRANS2_QUERY_FS_INFO_STRUCT t3; + case 5 TRANS2_QUERY_PATH_INFO_STRUCT t5; + case 8 TRANS2_SET_FILE_INFO_STRUCT t8; + } + +} Q_TRANS2_15; + +typedef struct _Q_TRANS2 { + uint8 wcount; + union ctr[wcount] { + case 15 Q_TRANS2_15 q15; + } +} Q_TRANS2; + +typedef struct { + ULONG NextEntryOffset; + ULONG FileIndex; + hyper CreationTime; + hyper LastAccessTime; + hyper LastWriteTime; + hyper ChangeTime; + hyper EndOfFile; + hyper AllocationSize; + ULONG ExtFileAttributes; + ULONG FileNameLength; + ULONG EaSize; + UCHAR ShortNameLength; + UCHAR Reserved; + uint8 ShortName[24]; + UCHAR FileName[FileNameLength]; + .align4 2; +} SMB_FIND_FILE_BOTH_DIRECTORY_INFO; + +typedef struct { + .align2 0; +} R_TRANS2_D0; + +typedef struct { + .align4 2; +} R_TRANS2_P0; + +typedef struct { + USHORT Reserved; +} R_TRANS2_P2; + +typedef struct { + USHORT Sid; /* Search handle */ + USHORT SearchCount; /* Number of entries returned */ + USHORT EndOfSearch; /* Was last entry returned? */ + USHORT EaErrorOffset; /* Offset into EA list if EA error */ + USHORT LastNameOffset; /* Offset into data to file name of last */ + /* entry, if server needs it to resume */ + /* search; else 0 */ + .align4 2; + SMB_FIND_FILE_BOTH_DIRECTORY_INFO i104[SearchCount]; +} R_TRANS2_FIND_FIRST2_STRUCT; + +typedef struct { + SMB_QUERY_FILE_BASIC_INFO_STRUCT i101; + .align4 2; +} R_TRANS2_FILE_BASIC_STRUCT; + +typedef struct _R_TRANS2_10 { + USHORT TotalParameterCount;/* Total parameter bytes being sent */ + USHORT TotalDataCount; /* Total data bytes being sent */ + USHORT Reserved2; + USHORT ParameterCount; /* Parameter bytes sent this buffer */ + USHORT ParameterOffset; /* Offset (from header start) to */ + /* Parameters */ + USHORT ParameterDisplacement; /* Specifies the offset from the start */ + /* of the overall parameter block to */ + /* the parameter bytes that are */ + /* contained in this message */ + USHORT DataCount; /* Data bytes sent this buffer */ + USHORT DataOffset; /* Offset (from header start) to data */ + USHORT DataDisplacement; /* Specifies the offset from the start */ + /* of the overall data block to the */ + /* data bytes that are contained in */ + /* this message. */ + UCHAR SetupCount; /* Count of setup words */ + UCHAR Reserved3; /* Reserved (pad above to word) */ + USHORT Setup[SetupCount]; /* Setup words */ + USHORT ByteCount; /* Count of data bytes */ + .align4 2; + union pctr[ParameterCount] { + case 0 R_TRANS2_P0 p0; + case 2 R_TRANS2_P2 p2; + case 10 R_TRANS2_FIND_FIRST2_STRUCT r10; + } + union dctr[DataCount] { + case 0 R_TRANS2_D0 d0; + case 0x24 R_TRANS2_FILE_BASIC_STRUCT r24; + case 0x14 SMB_QUERY_FS_ATTRIBUTE_INFO_STRUCT r14; + } +} R_TRANS2_10; + +typedef struct { + USHORT ByteCount; /* Count of data bytes */ +} R_TRANS2_0; + +typedef struct _R_TRANS2 { + uint8 wcount; + union ctr[wcount] { + case 0 R_TRANS2_0 q0; + case 10 R_TRANS2_10 q10; + } +} R_TRANS2; + +typedef struct _Q_TRANS_16 { + USHORT TotalParameterCount; /* Total parameter bytes being sent */ + USHORT TotalDataCount; /* Total data bytes being sent */ + USHORT MaxParameterCount; /* Max parameter bytes to return */ + USHORT MaxDataCount; /* Max data bytes to return */ + UCHAR MaxSetupCount; /* Max setup words to return */ + UCHAR Reserved; + USHORT Flags; /* Additional information: */ + /* bit 0 - also disconnect TID in TID */ + ULONG Timeout; + USHORT Reserved2; + USHORT ParameterCount; /* Parameter bytes sent this buffer */ + USHORT ParameterOffset; /* Offset (from header start) to */ + /* Parameters */ + USHORT DataCount; /* Data bytes sent this buffer */ + USHORT DataOffset; /* Offset (from header start) to data */ + UCHAR SetupCount; /* Count of setup words */ + UCHAR Reserved3; /* Reserved (pad above to word) */ + USHORT Setup[SetupCount]; /* Setup words (# = SetupWordCount) */ + USHORT ByteCount; /* Count of data bytes */ + STRING Name; /* Must be NULL */ + .align4 0; + UCHAR Parameters[ParameterCount];/* Parameter bytes (# = ParameterCount) */ + .align4 0; + UCHAR Data[DataCount]; /* Data bytes (# = DataCount) */ + +} Q_TRANS_16; + +typedef struct _Q_TRANS { + uint8 wcount; + union ctr[wcount] { + case 16 Q_TRANS_16 q16; + } +} Q_TRANS; + +typedef struct _R_TRANS_10 { + USHORT TotalParameterCount;/* Total parameter bytes being sent */ + USHORT TotalDataCount; /* Total data bytes being sent */ + USHORT Reserved2; + USHORT ParameterCount; /* Parameter bytes sent this buffer */ + USHORT ParameterOffset; /* Offset (from header start) to */ + /* Parameters */ + USHORT ParameterDisplacement; /* Specifies the offset from the start */ + /* of the overall parameter block to */ + /* the parameter bytes that are */ + /* contained in this message */ + USHORT DataCount; /* Data bytes sent this buffer */ + USHORT DataOffset; /* Offset (from header start) to data */ + USHORT DataDisplacement; /* Specifies the offset from the start */ + /* of the overall data block to the */ + /* data bytes that are contained in */ + /* this message. */ + UCHAR SetupCount; /* Count of setup words */ + UCHAR Reserved3; /* Reserved (pad above to word) */ + USHORT Setup[SetupCount]; /* Setup words */ + USHORT ByteCount; /* Count of data bytes */ + .align4 0; + UCHAR Parameters[ParameterCount];/* Parameter bytes */ + .align4 0; + UCHAR Data[DataCount]; /* Data bytes */ +} R_TRANS_10; + +typedef struct _R_TRANS { + uint8 wcount; + union ctr[wcount] { + case 10 R_TRANS_10 q10; + } +} R_TRANS; + +typedef struct _Q_NT_CREATE_ANDX_24 { + ANDX_INFO andx; + uint8 reserved; + uint16 name_len; + ULONG flags; + ULONG rootfid; + ULONG access; + hyper allocsize; + ULONG attribs; + ULONG sharing; + ULONG creat_disp; + ULONG creat_options; + ULONG impersonation; + uint8 sec_flags; + + uint16 count; + uint8 name[name_len]; + +} Q_NTCREATE_ANDX_24; + +typedef struct _Q_NTCREATE_ANDX{ + uint8 wcount; + union ctr[wcount] { + case 24 Q_NTCREATE_ANDX_24 q24; + } +} Q_NTCREATE_ANDX; + +typedef struct { + ANDX_INFO andx; + uint8 oplock_level; + uint16 fid; + ULONG action; + TIME create_time; + TIME access_time; + TIME write_time; + TIME change_time; + ULONG ext_attribs; + hyper allocsize; + hyper size; + uint16 type; + uint16 state; + uint8 directory; + + uint16 count; + uint8 none[count]; + +} R_NTCREATE_ANDX_34; + +typedef struct _R_NTCREATE_ANDX{ + uint8 wcount; + union ctr[wcount] { + case 34 R_NTCREATE_ANDX_34 q34; + } +} R_NTCREATE_ANDX; + +typedef struct { + ULONG smbhdr; + uint8 com; + uint8 rcls; + uint8 reh; + uint16 err; + uint8 flg; + uint16 flg2; + uint16 reserved; + uint8 SecuritySignature[8]; + uint16 pad; + uint16 tid; + uint16 pid; + uint16 uid; + uint16 mid; +} SMB_HDR; + +typedef struct _R_SMB { + ULONG nbhdr; + SMB_HDR hdr; + union ctr[hdr.com] { + case 4 R_CLOSE r4; + case 6 R_UNLINK r6; + case 36 R_LOCKING_ANDX r36; + case 37 R_TRANS r37; + case 45 R_OPEN_ANDX r45; + case 46 R_READ_ANDX r46; + case 47 R_WRITE_ANDX r47; + case 50 R_TRANS2 q50; + case 113 R_TDIS r113; + case 114 R_NEGPROT r114; + case 115 R_SESSION_SETUP_ANDX r115; + case 116 R_ULOGOFF_ANDX r116; + case 117 R_TCON_ANDX r117; + case 128 R_DSKATTR r128; + case 160 R_NTTRANS r160; + case 162 R_NTCREATE_ANDX r162; + } +} R_SMB; + +typedef struct _Q_SMB { + ULONG nbhdr; + SMB_HDR hdr; + union ctr[hdr.com] { + case 4 Q_CLOSE q4; + case 6 Q_UNLINK q6; + case 36 Q_LOCKING_ANDX q36; + case 37 Q_TRANS q37; + case 45 Q_OPEN_ANDX q45; + case 46 Q_READ_ANDX q46; + case 47 Q_WRITE_ANDX q47; + case 50 Q_TRANS2 q50; + case 113 Q_TDIS q113; + case 114 Q_NEGPROT q114; + case 115 Q_SESSION_SETUP_ANDX q115; + case 116 Q_ULOGOFF_ANDX q116; + case 117 Q_TCON_ANDX q117; + case 128 Q_DSKATTR q128; + case 160 Q_NTTRANS q160; + case 162 Q_NTCREATE_ANDX q162; + } +} Q_SMB; + |