📄 smb.h
字号:
#define ERRnowrite 19 // Read only media
#define ERRbadunit 20 // Unknown device
#define ERRnotready 21 // Drive not ready
#define ERRbadcmd 22 // Unknown command
#define ERRdata 23 // Data (CRC) error
#define ERRbadreq 24 // Bad request structure length
#define ERRseek 25
#define ERRbadmedia 26
#define ERRbadsector 27
#define ERRnopaper 28
#define ERRwrite 29 // Write fault
#define ERRread 30 // Read fault
#define ERRgeneral 31 // General hardware failure
#define ERRwrongdisk 34
#define ERRFCBunavail 35
#define ERRsharebufexc 36 // Share buffer exceeded
#define ERRdiskfull 39
#pragma pack(push)
#pragma pack(1)
typedef __int64 smb_size;
typedef __int64 smb_time;
//
// SMB ANDX structure
//
struct smb_andx
{
unsigned char cmd; // Secondary (X) command; 0xFF = none
unsigned char reserved; // Reserved (must be 0)
unsigned short offset; // Offset to next command WordCount
};
//
// SMB NEGOTIATE response parameters
//
struct smb_negotiate_response
{
unsigned short dialect_index; // Index of selected dialect
unsigned char security_mode; // Security mode:
// bit 0: 0 = share, 1 = user
// bit 1: 1 = encrypt passwords
// bit 2: 1 = Security Signatures (SMB sequence numbers) enabled
// bit 3: 1 = Security Signatures (SMB sequence numbers) required
unsigned short max_mpx_count; // Max pending multiplexed requests
unsigned short max_number_vcs; // Max VCs between client and server
unsigned long max_buffer_size; // Max transmit buffer size
unsigned long max_raw_size; // Maximum raw buffer size
unsigned long session_key; // Unique token identifying this session
unsigned long capabilities; // Server capabilities
unsigned long systemtime_low; // System (UTC) time of the server (low).
unsigned long systemtime_high; // System (UTC) time of the server (high).
short server_timezone; // Time zone of server (min from UTC)
unsigned char encryption_key_length; // Length of encryption key.
};
//
// SMB SESSION SETUP request parameters
//
struct smb_session_setup_request
{
struct smb_andx andx;
unsigned short max_buffer_size; // Client maximum buffer size
unsigned short max_mpx_count; // Actual maximum multiplexed pending requests
unsigned short vc_number; // 0 = first (only), nonzero=additional VC number
unsigned long session_key; // Session key (valid iff VcNumber != 0)
unsigned short ansi_password_length; // Account password size (ansi, case insensitive)
unsigned short unicode_password_length; // Account password size (unicode, case sensitive)
unsigned long reserved; // Must be 0
unsigned long capabilities; // Client capabilities
};
//
// SMB SESSION SETUP response parameters
//
struct smb_session_setup_response
{
struct smb_andx andx;
unsigned short action; // Request mode: bit0 = logged in as client
};
//
// SMB TREE CONNECT request parameters
//
struct smb_tree_connect_request
{
struct smb_andx andx;
unsigned short flags; // Additional information; bit 0 set = disconnect tid
unsigned short password_length; // Length of password[]
};
//
// SMB TREE CONNECT response parameters
//
struct smb_tree_connect_response
{
struct smb_andx andx;
unsigned short optional_support; // Optional support bits
};
//
// SMB CREATE FILE request parameters
//
struct smb_create_file_request
{
struct smb_andx andx;
unsigned char reserved; // Reserved (must be 0)
unsigned short name_length; // Length of name[] in bytes
unsigned long flags; // Create bit set:
// 0x02 - Request an oplock
// 0x04 - Request a batch oplock
// 0x08 - Target of open must be directory
unsigned long root_directory_fid; // If non-zero, open is relative to this directory
unsigned long desired_access; // Access desired
smb_size allocation_size; // Initial allocation size
unsigned long ext_file_attributes; // File attributes
unsigned long share_access; // Type of share access
unsigned long create_disposition; // Action to take if file exists or not
unsigned long create_options; // Options to use if creating a file
unsigned long impersonation_level; // Security QOS information
unsigned char security_flags; // Security tracking mode flags:
// 0x1 - SECURITY_CONTEXT_TRACKING
// 0x2 - SECURITY_EFFECTIVE_ONLY
};
//
// SMB CREATE FILE response parameters
//
struct smb_create_file_response
{
struct smb_andx andx;
unsigned char oplock_level; // The oplock level granted
// 0 - No oplock granted
// 1 - Exclusive oplock granted
// 2 - Batch oplock granted
// 3 - Level II oplock granted
unsigned short fid; // The file ID
unsigned long create_action; // The action taken
smb_time creation_time; // The time the file was created
smb_time last_access_time; // The time the file was accessed
smb_time last_write_time; // The time the file was last written
smb_time change_time; // The time the file was last changed
unsigned long ext_file_attributes; // The file attributes
smb_size allocation_size; // The number of byes allocated
smb_size end_of_file; // The end of file offset
unsigned short file_type;
unsigned short device_state; // State of IPC device (e.g. pipe)
unsigned char directory; // TRUE if this is a directory
};
//
// SMB CLOSE FILE request parameters
//
struct smb_close_file_request
{
unsigned short fid; // File handle
smb_time last_write_time; // Time of last write
};
//
// SMB FLUSH FILE request parameters
//
struct smb_flush_file_request
{
unsigned short fid; // File handle
};
//
// SMB READ FILE request parameters
//
struct smb_read_file_request
{
struct smb_andx andx;
unsigned short fid; // File handle
unsigned long offset; // Offset in file to begin read
unsigned short max_count; // Max number of bytes to return
unsigned short min_count; // Reserved
unsigned long reserved; // Must be 0
unsigned short remaining; // Reserved
unsigned long offset_high; // Upper 32 bits of offset (only if wordcount is 12)
};
//
// SMB READ FILE response parameters
//
struct smb_read_file_response
{
struct smb_andx andx;
unsigned short remaining; // Reserved -- must be -1
unsigned short data_compaction_mode;
unsigned short reserved1; // Reserved (must be 0)
unsigned short data_length; // Number of data bytes (min = 0)
unsigned short data_offset; // Offset (from header start) to data
unsigned short reserved2[5]; // Reserved (must be 0)
};
//
// SMB READ FILE RAW request parameters
//
struct smb_read_raw_request
{
unsigned short fid; // File handle
unsigned long offset; // Offset in file to begin read
unsigned short max_count; // Max number of bytes to return
unsigned short min_count; // Reserved
unsigned long timeout; // Wait timeout if named pipe
unsigned short reserved; // Reserved
};
//
// SMB WRITE FILE request parameters
//
struct smb_write_file_request
{
struct smb_andx andx;
unsigned short fid; // File handle
unsigned long offset; // Offset in file to begin read
unsigned long reserved1; // Must be 0
unsigned short write_mode; // Write mode bits: 0 - write through
unsigned short remaining; // Reserved
unsigned short reserved2; // Must be 0
unsigned short data_length; // Number of data bytes in buffer (>= 0)
unsigned short data_offset; // Offset to data bytes
unsigned long offset_high; // Upper 32 bits of offset (Only if wordcount is 14)
};
//
// SMB WRITE FILE response parameters
//
struct smb_write_file_response
{
struct smb_andx andx;
unsigned short count; // Number of bytes written
unsigned short remaining; // Reserved -- must be -1
unsigned short reserved; // Reserved (must be 0)
};
//
// SMB RENAME request parameters
//
struct smb_rename_request
{
unsigned short search_attributes; // Target file attributes
};
//
// SMB DELETE request parameters
//
struct smb_delete_request
{
unsigned short search_attributes; // Target file attributes
};
//
// SMB COPY request parameters
//
struct smb_copy_request
{
unsigned short tid2; // Second (target) path TID
unsigned short open_function; // What to do if target file exists
unsigned short flags; // Flags to control copy operation:
// bit 0 - target must be a file
// bit 1 - target must be a dir.
// bit 2 - copy target mode: 0 = binary, 1 = ASCII
// bit 3 - copy source mode: 0 = binary, 1 = ASCII
// bit 4 - verify all writes
// bit 5 - tree copy
};
//
// SMB COPY response parameters
//
struct smb_copy_response
{
unsigned short count; // Number of files copied
};
//
// SMB FINDCLOSE2 request parameters
//
struct smb_findclose_request
{
unsigned short sid; // Search handle
};
//
// SMB TRANSACTION request parameters
//
struct smb_trans_request
{
unsigned short total_parameter_count; // Total parameter bytes being sent
unsigned short total_data_count; // Total data bytes being sent
unsigned short max_parameter_count; // Max parameter bytes to return
unsigned short max_data_count; // Max data bytes to return
unsigned char max_setup_count; // Max setup words to return
unsigned char reserved;
unsigned short flags; // Additional information: bit 0 - also disconnect TID in Tid
unsigned long timeout;
unsigned short reserved2;
unsigned short parameter_count; // Parameter bytes sent this buffer
unsigned short parameter_offset; // Offset (from header start) to Parameters
unsigned short data_count; // Data bytes sent this buffer
unsigned short data_offset; // Offset (from header start) to data
unsigned char setup_count; // Count of setup words
unsigned char reserved3; // Reserved (pad above to word)
unsigned short setup[1]; // Setup words (# = SetupWordCount)
};
//
// SMB TRANSACTION response parameters
//
struct smb_trans_response
{
unsigned short total_parameter_count; // Total parameter bytes being sent
unsigned short total_data_count; // Total data bytes being sent
unsigned short reserved;
unsigned short parameter_count; // Parameter bytes sent this buffer
unsigned short parameter_offset; // Offset (from header start) to Parameters
unsigned short parameter_displacement;// Displacement of these Parameter bytes
unsigned short data_count; // Data bytes sent this buffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -