/* ------------------------------------------------------ ** * smb_header.h * ------------------------------------------------------ ** */ /* SMB Headers are always 32 bytes long. */ #define SMB_HDR_SIZE 32 /* FLAGS field bitmasks. */ #define SMB_FLAGS_SERVER_TO_REDIR 0x80 #define SMB_FLAGS_REQUEST_BATCH_OPLOCK 0x40 #define SMB_FLAGS_REQUEST_OPLOCK 0x20 #define SMB_FLAGS_CANONICAL_PATHNAMES 0x10 #define SMB_FLAGS_CASELESS_PATHNAMES 0x08 #define SMB_FLAGS_RESERVED 0x04 #define SMB_FLAGS_CLIENT_BUF_AVAIL 0x02 #define SMB_FLAGS_SUPPORT_LOCKREAD 0x01 #define SMB_FLAGS_MASK 0xFB /* FLAGS2 field bitmasks. */ #define SMB_FLAGS2_UNICODE_STRINGS 0x8000 #define SMB_FLAGS2_32BIT_STATUS 0x4000 #define SMB_FLAGS2_READ_IF_EXECUTE 0x2000 #define SMB_FLAGS2_DFS_PATHNAME 0x1000 #define SMB_FLAGS2_EXTENDED_SECURITY 0x0800 #define SMB_FLAGS2_RESERVED_01 0x0400 #define SMB_FLAGS2_RESERVED_02 0x0200 #define SMB_FLAGS2_RESERVED_03 0x0100 #define SMB_FLAGS2_RESERVED_04 0x0080 #define SMB_FLAGS2_IS_LONG_NAME 0x0040 #define SMB_FLAGS2_RESERVED_05 0x0020 #define SMB_FLAGS2_RESERVED_06 0x0010 #define SMB_FLAGS2_RESERVED_07 0x0008 #define SMB_FLAGS2_SECURITY_SIGNATURE 0x0004 #define SMB_FLAGS2_EAS 0x0002 #define SMB_FLAGS2_KNOWS_LONG_NAMES 0x0001 #define SMB_FLAGS2_MASK 0xF847 /* Field offsets. */ #define SMB_OFFSET_CMD 4 #define SMB_OFFSET_NTSTATUS 5 #define SMB_OFFSET_ECLASS 5 #define SMB_OFFSET_ECODE 7 #define SMB_OFFSET_FLAGS 9 #define SMB_OFFSET_FLAGS2 10 #define SMB_OFFSET_EXTRA 12 #define SMB_OFFSET_TID 24 #define SMB_OFFSET_PID 26 #define SMB_OFFSET_UID 28 #define SMB_OFFSET_MID 30 /* SMB command codes are given in the * SNIA doc. */ /* Write a command byte to the header buffer. */ #define smb_hdrSetCmd( bufr, cmd ) \ (bufr)[SMB_OFFSET_CMD] = (cmd) /* Read a command byte; returns uchar. */ #define smb_hdrGetCmd( bufr ) \ (uchar)((bufr)[SMB_OFFSET_CMD]) /* Write a DOS Error Class to the header buffer. */ #define smb_hdrSetEclassDOS( bufr, Eclass ) \ (bufr)[SMB_OFFSET_ECLASS] = (Eclass) /* Read a DOS Error Class; returns uchar. */ #define smb_hdrGetEclassDOS( bufr ) \ (uchar)((bufr)[SMB_OFFSET_ECLASS]) /* Write a DOS Error Code to the header buffer. */ #define smb_hdrSetEcodeDOS( bufr, Ecode ) \ smb_SetShort( bufr, SMB_OFFSET_ECODE, Ecode ) /* Read a DOS Error Code; returns ushort. */ #define smb_hdrGetEcodeDOS( bufr ) \ smb_GetShort( bufr, SMB_OFFSET_ECODE ) /* Write an NT_STATUS code. */ #define smb_hdrSetNTStatus( bufr, nt_status ) \ smb_PutLong( bufr, SMB_OFFSET_NTSTATUS, nt_status ) /* Read an NT_STATUS code; returns ulong. */ #define smb_hdrGetNTStatus( bufr ) \ smb_GetLong( bufr, SMB_OFFSET_NTSTATUS ) /* Write FLAGS to the header buffer. */ #define smb_hdrSetFlags( bufr, flags ) \ (bufr)[SMB_OFFSET_FLAGS] = (flags) /* Read FLAGS; returns uchar. */ #define smb_hdrGetFlags( bufr ) \ (uchar)((bufr)[SMB_OFFSET_FLAGS]) /* Write FLAGS2 to the header buffer. */ #define smb_hdrSetFlags2( bufr, flags2 ) \ smb_SetShort( bufr, SMB_OFFSET_FLAGS2, flags2 ) /* Read FLAGS2; returns ushort. */ #define smb_hdrGetFlags2( bufr ) \ smb_GetShort( bufr, SMB_OFFSET_FLAGS2 ) /* Write the TID. */ #define smb_hdrSetTID( bufr, TID ) \ smb_SetShort( bufr, SMB_OFFSET_TID, TID ) /* Read the TID; returns ushort. */ #define smb_hdrGetTID( bufr ) \ smb_GetShort( bufr, SMB_OFFSET_TID ) /* Write the PID. */ #define smb_hdrSetPID( bufr, PID ) \ smb_SetShort( bufr, SMB_OFFSET_PID, PID ) /* Read the PID; returns ushort. */ #define smb_hdrGetPID( bufr ) \ smb_GetShort( bufr, SMB_OFFSET_PID ) /* Write the [V]UID. */ #define smb_hdrSetUID( bufr, UID ) \ smb_SetShort( bufr, SMB_OFFSET_UID, UID ) /* Read the [V]UID; returns ushort. */ #define smb_hdrGetUID( bufr ) \ smb_GetShort( bufr, SMB_OFFSET_UID ) /* Write the MID. */ #define smb_hdrSetMID( bufr, MID ) \ smb_SetShort( bufr, SMB_OFFSET_MID, MID ) /* Read the MID; returns ushort. */ #define smb_hdrGetMID( bufr ) \ smb_GetShort( bufr, SMB_OFFSET_MID ) /* Function prototypes. */ int smb_hdrInit( uchar *bufr, int bsize ); /* ---------------------------------------------------- ** * Initialize an empty header structure. * Returns -1 on error, the SMB header size on success. * ---------------------------------------------------- ** */ int smb_hdrCheck( uchar *bufr, int bsize ); /* ---------------------------------------------------- ** * Perform some quick checks on a received buffer to * make sure it's safe to read. This function returns * a negative value if the SMB header is invalid. * ---------------------------------------------------- ** */
$Revision: 1.6 $ $Date: 2003/05/18 21:57:15 $ |
Copyright © 2002 Christopher R. Hertel Released under the terms of the LGPL |