📄 vfs_nbench.c
字号:
ZERO_STRUCT(wr->writex.out); } nbench_log(req, "WriteX %s %d %d %d %s\n", nbench_ntvfs_handle_string(req, wr->writex.in.file.ntvfs), (int)wr->writex.in.offset, wr->writex.in.count, wr->writex.out.nwritten, get_nt_error_c_code(req->async_states->status)); break; case RAW_WRITE_WRITE: if (!NT_STATUS_IS_OK(req->async_states->status)) { ZERO_STRUCT(wr->write.out); } nbench_log(req, "Write %s %d %d %d %s\n", nbench_ntvfs_handle_string(req, wr->write.in.file.ntvfs), wr->write.in.offset, wr->write.in.count, wr->write.out.nwritten, get_nt_error_c_code(req->async_states->status)); break; default: nbench_log(req, "Write-%d - NOT HANDLED\n", wr->generic.level); break; } PASS_THRU_REP_POST(req);}static NTSTATUS nbench_write(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_write *wr){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, write, wr, (ntvfs, req, wr)); return status;}/* seek in a file*/static void nbench_seek_send(struct ntvfs_request *req){ nbench_log(req, "Seek - NOT HANDLED\n"); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_seek(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_seek *io){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, seek, io, (ntvfs, req, io)); return status;}/* flush a file*/static void nbench_flush_send(struct ntvfs_request *req){ union smb_flush *io = req->async_states->private_data; switch (io->generic.level) { case RAW_FLUSH_FLUSH: nbench_log(req, "Flush %s %s\n", nbench_ntvfs_handle_string(req, io->flush.in.file.ntvfs), get_nt_error_c_code(req->async_states->status)); break; case RAW_FLUSH_ALL: nbench_log(req, "Flush %d %s\n", 0xFFFF, get_nt_error_c_code(req->async_states->status)); break; default: nbench_log(req, "Flush-%d - NOT HANDLED\n", io->generic.level); break; } PASS_THRU_REP_POST(req);}static NTSTATUS nbench_flush(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_flush *io){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, flush, io, (ntvfs, req, io)); return status;}/* close a file*/static void nbench_close_send(struct ntvfs_request *req){ union smb_close *io = req->async_states->private_data; switch (io->generic.level) { case RAW_CLOSE_CLOSE: nbench_log(req, "Close %s %s\n", nbench_ntvfs_handle_string(req, io->close.in.file.ntvfs), get_nt_error_c_code(req->async_states->status)); break; default: nbench_log(req, "Close-%d - NOT HANDLED\n", io->generic.level); break; } PASS_THRU_REP_POST(req);}static NTSTATUS nbench_close(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_close *io){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, close, io, (ntvfs, req, io)); return status;}/* exit - closing files*/static void nbench_exit_send(struct ntvfs_request *req){ nbench_log(req, "Exit - NOT HANDLED\n"); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_exit(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, exit, NULL, (ntvfs, req)); return status;}/* logoff - closing files*/static void nbench_logoff_send(struct ntvfs_request *req){ nbench_log(req, "Logoff - NOT HANDLED\n"); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_logoff(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, logoff, NULL, (ntvfs, req)); return status;}/* async_setup - send fn*/static void nbench_async_setup_send(struct ntvfs_request *req){ PASS_THRU_REP_POST(req);}/* async setup*/static NTSTATUS nbench_async_setup(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, void *private){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, async_setup, NULL, (ntvfs, req, private)); return status;}static void nbench_cancel_send(struct ntvfs_request *req){ PASS_THRU_REP_POST(req);}/* cancel an existing async request*/static NTSTATUS nbench_cancel(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, cancel, NULL, (ntvfs, req)); return status;}/* lock a byte range*/static void nbench_lock_send(struct ntvfs_request *req){ union smb_lock *lck = req->async_states->private_data; if (lck->generic.level == RAW_LOCK_LOCKX && lck->lockx.in.lock_cnt == 1 && lck->lockx.in.ulock_cnt == 0) { nbench_log(req, "LockX %s %d %d %s\n", nbench_ntvfs_handle_string(req, lck->lockx.in.file.ntvfs), (int)lck->lockx.in.locks[0].offset, (int)lck->lockx.in.locks[0].count, get_nt_error_c_code(req->async_states->status)); } else if (lck->generic.level == RAW_LOCK_LOCKX && lck->lockx.in.ulock_cnt == 1) { nbench_log(req, "UnlockX %s %d %d %s\n", nbench_ntvfs_handle_string(req, lck->lockx.in.file.ntvfs), (int)lck->lockx.in.locks[0].offset, (int)lck->lockx.in.locks[0].count, get_nt_error_c_code(req->async_states->status)); } else { nbench_log(req, "Lock-%d - NOT HANDLED\n", lck->generic.level); } PASS_THRU_REP_POST(req);}static NTSTATUS nbench_lock(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_lock *lck){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, lock, lck, (ntvfs, req, lck)); return status;}/* set info on a open file*/static void nbench_setfileinfo_send(struct ntvfs_request *req){ union smb_setfileinfo *info = req->async_states->private_data; nbench_log(req, "SET_FILE_INFORMATION %s %d %s\n", nbench_ntvfs_handle_string(req, info->generic.in.file.ntvfs), info->generic.level, get_nt_error_c_code(req->async_states->status)); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_setfileinfo(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_setfileinfo *info){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, setfileinfo, info, (ntvfs, req, info)); return status;}/* return filesystem space info*/static void nbench_fsinfo_send(struct ntvfs_request *req){ union smb_fsinfo *fs = req->async_states->private_data; nbench_log(req, "QUERY_FS_INFORMATION %d %s\n", fs->generic.level, get_nt_error_c_code(req->async_states->status)); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_fsinfo(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_fsinfo *fs){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, fsinfo, fs, (ntvfs, req, fs)); return status;}/* return print queue info*/static void nbench_lpq_send(struct ntvfs_request *req){ union smb_lpq *lpq = req->async_states->private_data; nbench_log(req, "Lpq-%d - NOT HANDLED\n", lpq->generic.level); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_lpq(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_lpq *lpq){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, lpq, lpq, (ntvfs, req, lpq)); return status;}/* list files in a directory matching a wildcard pattern*/static void nbench_search_first_send(struct ntvfs_request *req){ union smb_search_first *io = req->async_states->private_data; switch (io->generic.level) { case RAW_SEARCH_TRANS2: if (NT_STATUS_IS_ERR(req->async_states->status)) { ZERO_STRUCT(io->t2ffirst.out); } nbench_log(req, "FIND_FIRST \"%s\" %d %d %d %s\n", io->t2ffirst.in.pattern, io->t2ffirst.data_level, io->t2ffirst.in.max_count, io->t2ffirst.out.count, get_nt_error_c_code(req->async_states->status)); break; default: nbench_log(req, "Search-%d - NOT HANDLED\n", io->generic.level); break; } PASS_THRU_REP_POST(req);}static NTSTATUS nbench_search_first(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_search_first *io, void *search_private, bool (*callback)(void *, const union smb_search_data *)){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, search_first, io, (ntvfs, req, io, search_private, callback)); return status;}/* continue a search */static void nbench_search_next_send(struct ntvfs_request *req){ union smb_search_next *io = req->async_states->private_data; nbench_log(req, "Searchnext-%d - NOT HANDLED\n", io->generic.level); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_search_next(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_search_next *io, void *search_private, bool (*callback)(void *, const union smb_search_data *)){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, search_next, io, (ntvfs, req, io, search_private, callback)); return status;}/* close a search */static void nbench_search_close_send(struct ntvfs_request *req){ union smb_search_close *io = req->async_states->private_data; nbench_log(req, "Searchclose-%d - NOT HANDLED\n", io->generic.level); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_search_close(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, union smb_search_close *io){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, search_close, io, (ntvfs, req, io)); return status;}/* SMBtrans - not used on file shares */static void nbench_trans_send(struct ntvfs_request *req){ nbench_log(req, "Trans - NOT HANDLED\n"); PASS_THRU_REP_POST(req);}static NTSTATUS nbench_trans(struct ntvfs_module_context *ntvfs, struct ntvfs_request *req, struct smb_trans2 *trans2){ NTSTATUS status; PASS_THRU_REQ(ntvfs, req, trans, trans2, (ntvfs, req, trans2)); return status;}/* initialise the nbench backend, registering ourselves with the ntvfs subsystem */NTSTATUS ntvfs_nbench_init(void){ NTSTATUS ret; struct ntvfs_ops ops; NTVFS_CURRENT_CRITICAL_SIZES(vers); ZERO_STRUCT(ops); /* fill in the name and type */ ops.name = "nbench"; ops.type = NTVFS_DISK; /* fill in all the operations */ ops.connect = nbench_connect; ops.disconnect = nbench_disconnect; ops.unlink = nbench_unlink; ops.chkpath = nbench_chkpath; ops.qpathinfo = nbench_qpathinfo; ops.setpathinfo = nbench_setpathinfo; ops.open = nbench_open; ops.mkdir = nbench_mkdir; ops.rmdir = nbench_rmdir; ops.rename = nbench_rename; ops.copy = nbench_copy; ops.ioctl = nbench_ioctl; ops.read = nbench_read; ops.write = nbench_write; ops.seek = nbench_seek; ops.flush = nbench_flush; ops.close = nbench_close; ops.exit = nbench_exit; ops.lock = nbench_lock; ops.setfileinfo = nbench_setfileinfo; ops.qfileinfo = nbench_qfileinfo; ops.fsinfo = nbench_fsinfo; ops.lpq = nbench_lpq; ops.search_first = nbench_search_first; ops.search_next = nbench_search_next; ops.search_close = nbench_search_close; ops.trans = nbench_trans; ops.logoff = nbench_logoff; ops.async_setup = nbench_async_setup; ops.cancel = nbench_cancel; /* we don't register a trans2 handler as we want to be able to log individual trans2 requests */ ops.trans2 = NULL; /* register ourselves with the NTVFS subsystem. */ ret = ntvfs_register(&ops, &vers); if (!NT_STATUS_IS_OK(ret)) { DEBUG(0,("Failed to register nbench backend!\n")); } return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -