📄 gentest.c
字号:
options.smb2) { level = RAW_FILEINFO_SMB2_ALL_INFORMATION; } switch (level) { case RAW_FILEINFO_GENERIC: return false; case RAW_FILEINFO_GETATTR: CHECK_ATTRIB(getattr.out.attrib); CHECK_EQUAL(getattr.out.size); CHECK_TIMES_EQUAL(getattr.out.write_time); break; case RAW_FILEINFO_GETATTRE: CHECK_TIMES_EQUAL(getattre.out.create_time); CHECK_TIMES_EQUAL(getattre.out.access_time); CHECK_TIMES_EQUAL(getattre.out.write_time); CHECK_EQUAL(getattre.out.size); CHECK_EQUAL(getattre.out.alloc_size); CHECK_ATTRIB(getattre.out.attrib); break; case RAW_FILEINFO_STANDARD: CHECK_TIMES_EQUAL(standard.out.create_time); CHECK_TIMES_EQUAL(standard.out.access_time); CHECK_TIMES_EQUAL(standard.out.write_time); CHECK_EQUAL(standard.out.size); CHECK_EQUAL(standard.out.alloc_size); CHECK_ATTRIB(standard.out.attrib); break; case RAW_FILEINFO_EA_SIZE: CHECK_TIMES_EQUAL(ea_size.out.create_time); CHECK_TIMES_EQUAL(ea_size.out.access_time); CHECK_TIMES_EQUAL(ea_size.out.write_time); CHECK_EQUAL(ea_size.out.size); CHECK_EQUAL(ea_size.out.alloc_size); CHECK_ATTRIB(ea_size.out.attrib); CHECK_EQUAL(ea_size.out.ea_size); break; case RAW_FILEINFO_ALL_EAS: CHECK_EQUAL(all_eas.out.num_eas); for (i=0;i<parm[0].all_eas.out.num_eas;i++) { CHECK_EQUAL(all_eas.out.eas[i].flags); CHECK_WSTR_EQUAL(all_eas.out.eas[i].name); CHECK_BLOB_EQUAL(all_eas.out.eas[i].value); } break; case RAW_FILEINFO_IS_NAME_VALID: break; case RAW_FILEINFO_BASIC_INFO: case RAW_FILEINFO_BASIC_INFORMATION: CHECK_NTTIMES_EQUAL(basic_info.out.create_time); CHECK_NTTIMES_EQUAL(basic_info.out.access_time); CHECK_NTTIMES_EQUAL(basic_info.out.write_time); CHECK_NTTIMES_EQUAL(basic_info.out.change_time); CHECK_ATTRIB(basic_info.out.attrib); break; case RAW_FILEINFO_STANDARD_INFO: case RAW_FILEINFO_STANDARD_INFORMATION: CHECK_EQUAL(standard_info.out.alloc_size); CHECK_EQUAL(standard_info.out.size); CHECK_EQUAL(standard_info.out.nlink); CHECK_EQUAL(standard_info.out.delete_pending); CHECK_EQUAL(standard_info.out.directory); break; case RAW_FILEINFO_EA_INFO: case RAW_FILEINFO_EA_INFORMATION: CHECK_EQUAL(ea_info.out.ea_size); break; case RAW_FILEINFO_NAME_INFO: case RAW_FILEINFO_NAME_INFORMATION: CHECK_WSTR_EQUAL(name_info.out.fname); break; case RAW_FILEINFO_ALL_INFO: case RAW_FILEINFO_ALL_INFORMATION: CHECK_NTTIMES_EQUAL(all_info.out.create_time); CHECK_NTTIMES_EQUAL(all_info.out.access_time); CHECK_NTTIMES_EQUAL(all_info.out.write_time); CHECK_NTTIMES_EQUAL(all_info.out.change_time); CHECK_ATTRIB(all_info.out.attrib); CHECK_EQUAL(all_info.out.alloc_size); CHECK_EQUAL(all_info.out.size); CHECK_EQUAL(all_info.out.nlink); CHECK_EQUAL(all_info.out.delete_pending); CHECK_EQUAL(all_info.out.directory); CHECK_EQUAL(all_info.out.ea_size); CHECK_WSTR_EQUAL(all_info.out.fname); break; case RAW_FILEINFO_ALT_NAME_INFO: case RAW_FILEINFO_ALT_NAME_INFORMATION: CHECK_WSTR_EQUAL(alt_name_info.out.fname); break; case RAW_FILEINFO_STREAM_INFO: case RAW_FILEINFO_STREAM_INFORMATION: CHECK_EQUAL(stream_info.out.num_streams); for (i=0;i<parm[0].stream_info.out.num_streams;i++) { CHECK_EQUAL(stream_info.out.streams[i].size); CHECK_EQUAL(stream_info.out.streams[i].alloc_size); CHECK_WSTR_EQUAL(stream_info.out.streams[i].stream_name); } break; case RAW_FILEINFO_COMPRESSION_INFO: case RAW_FILEINFO_COMPRESSION_INFORMATION: CHECK_EQUAL(compression_info.out.compressed_size); CHECK_EQUAL(compression_info.out.format); CHECK_EQUAL(compression_info.out.unit_shift); CHECK_EQUAL(compression_info.out.chunk_shift); CHECK_EQUAL(compression_info.out.cluster_shift); break; case RAW_FILEINFO_INTERNAL_INFORMATION: CHECK_EQUAL(internal_information.out.file_id); break; case RAW_FILEINFO_ACCESS_INFORMATION: CHECK_EQUAL(access_information.out.access_flags); break; case RAW_FILEINFO_POSITION_INFORMATION: CHECK_EQUAL(position_information.out.position); break; case RAW_FILEINFO_MODE_INFORMATION: CHECK_EQUAL(mode_information.out.mode); break; case RAW_FILEINFO_ALIGNMENT_INFORMATION: CHECK_EQUAL(alignment_information.out.alignment_requirement); break; case RAW_FILEINFO_NETWORK_OPEN_INFORMATION: CHECK_NTTIMES_EQUAL(network_open_information.out.create_time); CHECK_NTTIMES_EQUAL(network_open_information.out.access_time); CHECK_NTTIMES_EQUAL(network_open_information.out.write_time); CHECK_NTTIMES_EQUAL(network_open_information.out.change_time); CHECK_EQUAL(network_open_information.out.alloc_size); CHECK_EQUAL(network_open_information.out.size); CHECK_ATTRIB(network_open_information.out.attrib); break; case RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION: CHECK_ATTRIB(attribute_tag_information.out.attrib); CHECK_EQUAL(attribute_tag_information.out.reparse_tag); break; case RAW_FILEINFO_SMB2_ALL_INFORMATION: CHECK_NTTIMES_EQUAL(all_info2.out.create_time); CHECK_NTTIMES_EQUAL(all_info2.out.access_time); CHECK_NTTIMES_EQUAL(all_info2.out.write_time); CHECK_NTTIMES_EQUAL(all_info2.out.change_time); CHECK_ATTRIB(all_info2.out.attrib); CHECK_EQUAL(all_info2.out.unknown1); CHECK_EQUAL(all_info2.out.alloc_size); CHECK_EQUAL(all_info2.out.size); CHECK_EQUAL(all_info2.out.nlink); CHECK_EQUAL(all_info2.out.delete_pending); CHECK_EQUAL(all_info2.out.directory); CHECK_EQUAL(all_info2.out.file_id); CHECK_EQUAL(all_info2.out.ea_size); CHECK_EQUAL(all_info2.out.access_mask); CHECK_EQUAL(all_info2.out.position); CHECK_EQUAL(all_info2.out.mode); CHECK_EQUAL(all_info2.out.alignment_requirement); CHECK_WSTR_EQUAL(all_info2.out.fname); break; case RAW_FILEINFO_SMB2_ALL_EAS: CHECK_EQUAL(all_eas.out.num_eas); for (i=0;i<parm[0].all_eas.out.num_eas;i++) { CHECK_EQUAL(all_eas.out.eas[i].flags); CHECK_WSTR_EQUAL(all_eas.out.eas[i].name); CHECK_BLOB_EQUAL(all_eas.out.eas[i].value); } break; case RAW_FILEINFO_SEC_DESC: CHECK_SECDESC(query_secdesc.out.sd); break; /* Unhandled levels */ case RAW_FILEINFO_EA_LIST: case RAW_FILEINFO_UNIX_BASIC: case RAW_FILEINFO_UNIX_LINK: case RAW_FILEINFO_UNIX_INFO2: break; } return true;}/* generate openx operations*/static bool handler_smb_openx(int instance){ union smb_open parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].openx.level = RAW_OPEN_OPENX; parm[0].openx.in.flags = gen_openx_flags(); parm[0].openx.in.open_mode = gen_openx_mode(); parm[0].openx.in.search_attrs = gen_attrib(); parm[0].openx.in.file_attrs = gen_attrib(); parm[0].openx.in.write_time = gen_timet(); parm[0].openx.in.open_func = gen_openx_func(); parm[0].openx.in.size = gen_io_count(); parm[0].openx.in.timeout = gen_timeout(); parm[0].openx.in.fname = gen_fname_open(instance); if (!options.use_oplocks) { /* mask out oplocks */ parm[0].openx.in.flags &= ~(OPENX_FLAGS_REQUEST_OPLOCK| OPENX_FLAGS_REQUEST_BATCH_OPLOCK); } GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_open(tree, current_op.mem_ctx, &parm[i])); CHECK_ATTRIB(openx.out.attrib); CHECK_EQUAL(openx.out.size); CHECK_EQUAL(openx.out.access); CHECK_EQUAL(openx.out.ftype); CHECK_EQUAL(openx.out.devstate); CHECK_EQUAL(openx.out.action); CHECK_EQUAL(openx.out.access_mask); CHECK_EQUAL(openx.out.unknown); CHECK_TIMES_EQUAL(openx.out.write_time); /* open creates a new file handle */ ADD_HANDLE_SMB(parm[0].openx.in.fname, openx.out.file.fnum); return true;}/* generate open operations*/static bool handler_smb_open(int instance){ union smb_open parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].openold.level = RAW_OPEN_OPEN; parm[0].openold.in.open_mode = gen_bits_mask2(0xF, 0xFFFF); parm[0].openold.in.search_attrs = gen_attrib(); parm[0].openold.in.fname = gen_fname_open(instance); if (!options.use_oplocks) { /* mask out oplocks */ parm[0].openold.in.open_mode &= ~(OPENX_FLAGS_REQUEST_OPLOCK| OPENX_FLAGS_REQUEST_BATCH_OPLOCK); } GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_open(tree, current_op.mem_ctx, &parm[i])); CHECK_ATTRIB(openold.out.attrib); CHECK_TIMES_EQUAL(openold.out.write_time); CHECK_EQUAL(openold.out.size); CHECK_EQUAL(openold.out.rmode); /* open creates a new file handle */ ADD_HANDLE_SMB(parm[0].openold.in.fname, openold.out.file.fnum); return true;}/* generate ntcreatex operations*/static bool handler_smb_ntcreatex(int instance){ union smb_open parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].ntcreatex.level = RAW_OPEN_NTCREATEX; parm[0].ntcreatex.in.flags = gen_ntcreatex_flags(); parm[0].ntcreatex.in.root_fid = gen_root_fid(instance); parm[0].ntcreatex.in.access_mask = gen_access_mask(); parm[0].ntcreatex.in.alloc_size = gen_alloc_size(); parm[0].ntcreatex.in.file_attr = gen_attrib(); parm[0].ntcreatex.in.share_access = gen_bits_mask2(0x7, 0xFFFFFFFF); parm[0].ntcreatex.in.open_disposition = gen_open_disp(); parm[0].ntcreatex.in.create_options = gen_create_options(); parm[0].ntcreatex.in.impersonation = gen_bits_mask2(0, 0xFFFFFFFF); parm[0].ntcreatex.in.security_flags = gen_bits_mask2(0, 0xFF); parm[0].ntcreatex.in.fname = gen_fname_open(instance); if (!options.use_oplocks) { /* mask out oplocks */ parm[0].ntcreatex.in.flags &= ~(NTCREATEX_FLAGS_REQUEST_OPLOCK| NTCREATEX_FLAGS_REQUEST_BATCH_OPLOCK); } GEN_COPY_PARM; if (parm[0].ntcreatex.in.root_fid != 0) { GEN_SET_FNUM_SMB(ntcreatex.in.root_fid); } GEN_CALL_SMB(smb_raw_open(tree, current_op.mem_ctx, &parm[i])); CHECK_EQUAL(ntcreatex.out.oplock_level); CHECK_EQUAL(ntcreatex.out.create_action); CHECK_NTTIMES_EQUAL(ntcreatex.out.create_time); CHECK_NTTIMES_EQUAL(ntcreatex.out.access_time); CHECK_NTTIMES_EQUAL(ntcreatex.out.write_time); CHECK_NTTIMES_EQUAL(ntcreatex.out.change_time); CHECK_ATTRIB(ntcreatex.out.attrib); CHECK_EQUAL(ntcreatex.out.alloc_size); CHECK_EQUAL(ntcreatex.out.size); CHECK_EQUAL(ntcreatex.out.file_type); CHECK_EQUAL(ntcreatex.out.ipc_state); CHECK_EQUAL(ntcreatex.out.is_directory); /* ntcreatex creates a new file handle */ ADD_HANDLE_SMB(parm[0].ntcreatex.in.fname, ntcreatex.out.file.fnum); return true;}/* generate close operations*/static bool handler_smb_close(int instance){ union smb_close parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].close.level = RAW_CLOSE_CLOSE; parm[0].close.in.file.fnum = gen_fnum_close(instance); parm[0].close.in.write_time = gen_timet(); GEN_COPY_PARM; GEN_SET_FNUM_SMB(close.in.file.fnum); GEN_CALL_SMB(smb_raw_close(tree, &parm[i])); REMOVE_HANDLE_SMB(close.in.file.fnum); return true;}/* generate unlink operations*/static bool handler_smb_unlink(int instance){ union smb_unlink parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].unlink.in.pattern = gen_pattern(); parm[0].unlink.in.attrib = gen_attrib(); GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_unlink(tree, &parm[i])); return true;}/* generate chkpath operations*/static bool handler_smb_chkpath(int instance){ union smb_chkpath parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].chkpath.in.path = gen_fname_open(instance); GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_chkpath(tree, &parm[i])); return true;}/* generate mkdir operations*/static bool handler_smb_mkdir(int instance){ union smb_mkdir parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].mkdir.level = RAW_MKDIR_MKDIR; parm[0].mkdir.in.path = gen_fname_open(instance); GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_mkdir(tree, &parm[i])); return true;}/* generate rmdir operations*/static bool handler_smb_rmdir(int instance){ struct smb_rmdir parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].in.path = gen_fname_open(instance); GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_rmdir(tree, &parm[i])); return true;}/* generate rename operations*/static bool handler_smb_rename(int instance){ union smb_rename parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].generic.level = RAW_RENAME_RENAME; parm[0].rename.in.pattern1 = gen_pattern(); parm[0].rename.in.pattern2 = gen_pattern(); parm[0].rename.in.attrib = gen_attrib(); GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_rename(tree, &parm[i])); return true;}/* generate ntrename operations*/static bool handler_smb_ntrename(int instance){ union smb_rename parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].generic.level = RAW_RENAME_NTRENAME; parm[0].ntrename.in.old_name = gen_fname(); parm[0].ntrename.in.new_name = gen_fname(); parm[0].ntrename.in.attrib = gen_attrib(); parm[0].ntrename.in.cluster_size = gen_bits_mask2(0, 0xFFFFFFF); parm[0].ntrename.in.flags = gen_rename_flags(); GEN_COPY_PARM; GEN_CALL_SMB(smb_raw_rename(tree, &parm[i])); return true;}/* generate seek operations*/static bool handler_smb_seek(int instance){ union smb_seek parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].lseek.in.file.fnum = gen_fnum(instance); parm[0].lseek.in.mode = gen_bits_mask2(0x3, 0xFFFF); parm[0].lseek.in.offset = gen_offset(); GEN_COPY_PARM; GEN_SET_FNUM_SMB(lseek.in.file.fnum); GEN_CALL_SMB(smb_raw_seek(tree, &parm[i])); CHECK_EQUAL(lseek.out.offset); return true;}/* generate readx operations*/static bool handler_smb_readx(int instance){ union smb_read parm[NSERVERS]; NTSTATUS status[NSERVERS]; parm[0].readx.level = RAW_READ_READX; parm[0].readx.in.file.fnum = gen_fnum(instance); parm[0].readx.in.offset = gen_offset(); parm[0].readx.in.mincnt = gen_io_count(); parm[0].readx.in.maxcnt = gen_io_count(); parm[0].readx.in.remaining = gen_io_count(); parm[0].readx.in.read_for_execute = gen_bool(); parm[0].readx.out.data = talloc_array(current_op.mem_ctx, uint8_t,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -