⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smbtrans2client.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "headers.h"static SmbTransactionMethod method = {	.encodeprimary = smbtransactionencodeprimary2,	.sendrequest = smbtransactionclientsend,	.receiveresponse = smbtransactionclientreceive,	.decoderesponse = smbtransactiondecoderesponse2,};intsmbclienttrans2(SmbClient *c, uchar scount, ushort *setup, SmbBuffer *inparam, SmbBuffer *outparam, SmbBuffer *outdata, SmbHeader *rh, char **errmsgp){	SmbTransaction transaction;	SmbHeader h;	memset(&transaction, 0, sizeof(transaction));	transaction.in.scount = scount;	transaction.in.setup = setup;	transaction.in.parameters = smbbufferreadpointer(inparam);	transaction.in.tpcount = smbbufferreadspace(inparam);	transaction.in.maxpcount = smbbufferwritespace(outparam);	transaction.in.maxdcount = smbbufferwritespace(outdata);	transaction.out.parameters = outparam;	transaction.out.data = outdata;	h = c->protoh;	h.tid = c->sharetid;	h.mid = 0;	return smbtransactionexecute(&transaction, &h, &c->peerinfo, c->b, &method, c, rh, errmsgp);}intsmbclienttrans2findfirst2(SmbClient *c, ushort searchcount, char *filename,	ushort *sidp, ushort *searchcountp, ushort *endofsearchp,SmbFindFileBothDirectoryInfo *ip, char **errmsgp){	int rv;	ushort setup;	SmbBuffer *inparam;	SmbBuffer *outparam;	SmbBuffer *outdata;	SmbHeader rh;	setup = SMB_TRANS2_FIND_FIRST2;	inparam = smbbuffernew(512);	smbbufferputs(inparam, 0x16);	smbbufferputs(inparam, searchcount);	smbbufferputs(inparam, 7);	smbbufferputs(inparam, SMB_FIND_FILE_BOTH_DIRECTORY_INFO);	smbbufferputl(inparam, 0);	smbbufferputstring(inparam, &c->peerinfo, 0, filename);	outparam = smbbuffernew(10);	outdata = smbbuffernew(65535);	rv = smbclienttrans2(c, 1, &setup, inparam, outparam, outdata, &rh, errmsgp);	smbbufferfree(&inparam);	if (rv) {		ushort eaerroroffset, lastnameoffset;		ulong nextentry;		int i;		if (!smbbuffergets(outparam, sidp)			|| !smbbuffergets(outparam, searchcountp)			|| !smbbuffergets(outparam, endofsearchp)			|| !smbbuffergets(outparam, &eaerroroffset)			|| !smbbuffergets(outparam, &lastnameoffset)) {			smbstringprint(errmsgp, "smbclienttrans2findfirst2: not enough parameters returned");			rv = 0;			goto done;		}		nextentry = 0;smblogprint(-1, "returned data:\n");smblogdata(-1, smblogprint, smbbufferreadpointer(outdata), smbbufferreadspace(outdata), 256);		for (i = 0; i < *searchcountp; i++) {			SmbFindFileBothDirectoryInfo *info = ip + i;			ulong neo, filenamelength, easize;			uchar shortnamelength;			if (i && !smbbufferreadskipto(outdata, nextentry)) {			underflow:				smbstringprint(errmsgp, "smbclientrans2findfirst2: not enough data returned");				rv = 0;				goto done;			}			if (!smbbuffergetl(outdata, &neo))				goto underflow;			nextentry = smbbufferreadoffset(outdata) + neo - 4;print("neo 0x%.8lux\n", neo);			if (!smbbuffergetl(outdata, &info->fileindex)				|| !smbbuffergetv(outdata, &info->creationtime)				|| !smbbuffergetv(outdata, &info->lastaccesstime)				|| !smbbuffergetv(outdata, &info->lastwritetime)				|| !smbbuffergetv(outdata, &info->changetime)				|| !smbbuffergetv(outdata, &info->endoffile)				|| !smbbuffergetv(outdata, &info->allocationsize))				goto underflow;print("got here\n");			if (!smbbuffergetl(outdata, &info->extfileattributes)				|| !smbbuffergetl(outdata, &filenamelength)				|| !smbbuffergetl(outdata, &easize)				|| !smbbuffergetb(outdata, &shortnamelength)				|| !smbbuffergetbytes(outdata, nil, 1)				|| !smbbuffergetbytes(outdata, nil, 24)				|| !smbbuffergetstring(outdata, &rh, SMB_STRING_REVPATH, &info->filename))				goto underflow;print("got here as well\n");		}	}done:	smbbufferfree(&outparam);	smbbufferfree(&outdata);	return rv;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -