亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? reg_perfcount.c

?? samba-3.0.22.tar.gz 編譯smb服務(wù)器的源碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*  *  Unix SMB/CIFS implementation. *  Virtual Windows Registry Layer * *  Copyright (C) Marcin Krzysztof Porwit    2005, *  Copyright (C) Gerald (Jerry) Carter      2005. *   *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. *   *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. *   *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include "includes.h"#undef DBGC_CLASS#define DBGC_CLASS DBGC_RPC_SRV#define PERFCOUNT_MAX_LEN 256#define PERFCOUNTDIR	"perfmon"#define NAMES_DB	"names.tdb"#define DATA_DB		"data.tdb"/******************************************************************************************************************************************/static char* counters_directory( const char *dbname ){	static pstring fname;	fstring path;		if ( !dbname )		return NULL;		fstr_sprintf( path, "%s/%s", PERFCOUNTDIR, dbname );		pstrcpy( fname, lock_path( path ) );		return fname;}/******************************************************************************************************************************************/void perfcount_init_keys( void ){	char *p = lock_path(PERFCOUNTDIR);	/* no registry keys; just create the perfmon directory */		if ( !directory_exist( p, NULL ) )		mkdir( p, 0755 );		return;}/******************************************************************************************************************************************/uint32 reg_perfcount_get_base_index(void){	const char *fname = counters_directory( NAMES_DB );	TDB_CONTEXT *names;	TDB_DATA kbuf, dbuf;	char key[] = "1";	uint32 retval = 0;	char buf[PERFCOUNT_MAX_LEN];	names = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDONLY, 0444);	if ( !names ) {		DEBUG(1, ("reg_perfcount_get_base_index: unable to open [%s].\n", fname));		return 0;	}    	/* needs to read the value of key "1" from the counter_names.tdb file, as that is	   where the total number of counters is stored. We're assuming no holes in the	   enumeration.	   The format for the counter_names.tdb file is:	   key        value	   1          num_counters	   2          perf_counter1	   3          perf_counter1_help	   4          perf_counter2	   5          perf_counter2_help	   even_num   perf_counter<even_num>	   even_num+1 perf_counter<even_num>_help	   and so on.	   So last_counter becomes num_counters*2, and last_help will be last_counter+1 */	kbuf.dptr = key;	kbuf.dsize = strlen(key);	dbuf = tdb_fetch(names, kbuf);	if(dbuf.dptr == NULL)	{		DEBUG(1, ("reg_perfcount_get_base_index: failed to find key \'1\' in [%s].\n", fname));		tdb_close(names);		return 0;	}	else	{		tdb_close(names);		memset(buf, 0, PERFCOUNT_MAX_LEN);		memcpy(buf, dbuf.dptr, dbuf.dsize);		retval = (uint32)atoi(buf);		SAFE_FREE(dbuf.dptr);		return retval;	}	return 0;}/******************************************************************************************************************************************/uint32 reg_perfcount_get_last_counter(uint32 base_index){	uint32 retval;	if(base_index == 0)		retval = 0;	else		retval = base_index * 2;	return retval;}/******************************************************************************************************************************************/uint32 reg_perfcount_get_last_help(uint32 last_counter){	uint32 retval;	if(last_counter == 0)		retval = 0;	else		retval = last_counter + 1;	return retval;}/******************************************************************************************************************************************/static uint32 _reg_perfcount_multi_sz_from_tdb(TDB_CONTEXT *tdb, 					       int keyval,					       char **retbuf,					       uint32 buffer_size){	TDB_DATA kbuf, dbuf;	char temp[256];	char *buf1 = *retbuf, *buf2 = NULL;	uint32 working_size = 0;	UNISTR2 name_index, name;	memset(temp, 0, sizeof(temp));	snprintf(temp, sizeof(temp), "%d", keyval);	kbuf.dptr = temp;	kbuf.dsize = strlen(temp);	dbuf = tdb_fetch(tdb, kbuf);	if(dbuf.dptr == NULL)	{		/* If a key isn't there, just bypass it -- this really shouldn't 		   happen unless someone's mucking around with the tdb */		DEBUG(3, ("_reg_perfcount_multi_sz_from_tdb: failed to find key [%s] in [%s].\n",			  temp, tdb->name));		return buffer_size;	}	/* First encode the name_index */	working_size = (kbuf.dsize + 1)*sizeof(uint16);	buf2 = SMB_REALLOC(buf1, buffer_size + working_size);	if(!buf2)	{		SAFE_FREE(buf1);		buffer_size = 0;		return buffer_size;	}	buf1 = buf2;	init_unistr2(&name_index, kbuf.dptr, UNI_STR_TERMINATE);	memcpy(buf1+buffer_size, (char *)name_index.buffer, working_size);	buffer_size += working_size;	/* Now encode the actual name */	working_size = (dbuf.dsize + 1)*sizeof(uint16);	buf2 = SMB_REALLOC(buf1, buffer_size + working_size);	if(!buf2)	{		SAFE_FREE(buf1);		buffer_size = 0;		return buffer_size;	}	buf1 = buf2;	memset(temp, 0, sizeof(temp));	memcpy(temp, dbuf.dptr, dbuf.dsize);	SAFE_FREE(dbuf.dptr);	init_unistr2(&name, temp, UNI_STR_TERMINATE);	memcpy(buf1+buffer_size, (char *)name.buffer, working_size);	buffer_size += working_size;	*retbuf = buf1;	return buffer_size;}/******************************************************************************************************************************************/uint32 reg_perfcount_get_counter_help(uint32 base_index, char **retbuf){	char *buf1 = NULL, *buf2 = NULL;	uint32 buffer_size = 0;	TDB_CONTEXT *names;	const char *fname = counters_directory( NAMES_DB );	int i;	if(base_index == 0)		return 0;	names = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDONLY, 0444);	if(names == NULL)	{		DEBUG(1, ("reg_perfcount_get_counter_help: unable to open [%s].\n", fname));		return 0;	}    	for(i = 1; i <= base_index; i++)	{		buffer_size = _reg_perfcount_multi_sz_from_tdb(names, (i*2)+1, retbuf, buffer_size);	}	tdb_close(names);	/* Now terminate the MULTI_SZ with a double unicode NULL */	buf1 = *retbuf;	buf2 = SMB_REALLOC(buf1, buffer_size + 2);	if(!buf2)	{		SAFE_FREE(buf1);		buffer_size = 0;	}	else	{		buf1 = buf2;		buf1[buffer_size++] = '\0';		buf1[buffer_size++] = '\0';	}	*retbuf = buf1;	return buffer_size;}/******************************************************************************************************************************************/uint32 reg_perfcount_get_counter_names(uint32 base_index, char **retbuf){	char *buf1 = NULL, *buf2 = NULL;	uint32 buffer_size = 0;	TDB_CONTEXT *names;	const char *fname = counters_directory( NAMES_DB );	int i;	if(base_index == 0)		return 0;	names = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDONLY, 0444);	if(names == NULL)	{		DEBUG(1, ("reg_perfcount_get_counter_names: unable to open [%s].\n", fname));		return 0;	}    	buffer_size = _reg_perfcount_multi_sz_from_tdb(names, 1, retbuf, buffer_size);	for(i = 1; i <= base_index; i++)	{		buffer_size = _reg_perfcount_multi_sz_from_tdb(names, i*2, retbuf, buffer_size);	}	tdb_close(names);	/* Now terminate the MULTI_SZ with a double unicode NULL */	buf1 = *retbuf;	buf2 = SMB_REALLOC(buf1, buffer_size + 2);	if(!buf2)	{		SAFE_FREE(buf1);		buffer_size = 0;	}	else	{		buf1 = buf2;		buf1[buffer_size++] = '\0';		buf1[buffer_size++] = '\0';	}	*retbuf=buf1;	return buffer_size;}/******************************************************************************************************************************************/static void _reg_perfcount_make_key(TDB_DATA *key,				    char *buf,				    int buflen,				    int key_part1,				    const char *key_part2){	memset(buf, 0, buflen);	if(key_part2 != NULL)		snprintf(buf, buflen,"%d%s", key_part1, key_part2);	else 		snprintf(buf, buflen, "%d", key_part1);	key->dptr = buf;	key->dsize = strlen(buf);	return;}/******************************************************************************************************************************************/static BOOL _reg_perfcount_isparent(TDB_DATA data){	if(data.dsize > 0)	{		if(data.dptr[0] == 'p')			return True;		else			return False;	}	return False;}/******************************************************************************************************************************************/static BOOL _reg_perfcount_ischild(TDB_DATA data){	if(data.dsize > 0)	{		if(data.dptr[0] == 'c')			return True;		else			return False;	}	return False;}/******************************************************************************************************************************************/static uint32 _reg_perfcount_get_numinst(int objInd, TDB_CONTEXT *names){	TDB_DATA key, data;	char buf[PERFCOUNT_MAX_LEN];	_reg_perfcount_make_key(&key, buf, PERFCOUNT_MAX_LEN, objInd, "inst");	data = tdb_fetch(names, key);	if(data.dptr == NULL)		return (uint32)PERF_NO_INSTANCES;    	memset(buf, 0, PERFCOUNT_MAX_LEN);	memcpy(buf, data.dptr, data.dsize);	return (uint32)atoi(buf);}/******************************************************************************************************************************************/static BOOL _reg_perfcount_add_object(PERF_DATA_BLOCK *block,				      prs_struct *ps,				      int num,				      TDB_DATA data,				      TDB_CONTEXT *names){	int i;	BOOL success = False;	PERF_OBJECT_TYPE *obj;	block->objects = (PERF_OBJECT_TYPE *)TALLOC_REALLOC_ARRAY(ps->mem_ctx,								  block->objects,								  PERF_OBJECT_TYPE,								  block->NumObjectTypes+1);	if(block->objects == NULL)		return False;	obj = &(block->objects[block->NumObjectTypes]);	memset((void *)&(block->objects[block->NumObjectTypes]), 0, sizeof(PERF_OBJECT_TYPE));	block->objects[block->NumObjectTypes].ObjectNameTitleIndex = num;	block->objects[block->NumObjectTypes].ObjectNameTitlePointer = 0;	block->objects[block->NumObjectTypes].ObjectHelpTitleIndex = num+1;	block->objects[block->NumObjectTypes].ObjectHelpTitlePointer = 0;	block->objects[block->NumObjectTypes].NumCounters = 0;	block->objects[block->NumObjectTypes].DefaultCounter = 0;	block->objects[block->NumObjectTypes].NumInstances = _reg_perfcount_get_numinst(num, names);	block->objects[block->NumObjectTypes].counters = NULL;	block->objects[block->NumObjectTypes].instances = NULL;	block->objects[block->NumObjectTypes].counter_data.ByteLength = sizeof(uint32);	block->objects[block->NumObjectTypes].counter_data.data = NULL;	block->objects[block->NumObjectTypes].DetailLevel = PERF_DETAIL_NOVICE;	block->NumObjectTypes+=1;	for(i = 0; i < (int)obj->NumInstances; i++)	{		success = _reg_perfcount_add_instance(obj, ps, i, names);	}	return True;}/******************************************************************************************************************************************/BOOL _reg_perfcount_get_counter_data(TDB_DATA key, TDB_DATA *data){	TDB_CONTEXT *counters;	const char *fname = counters_directory( DATA_DB );    	counters = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDONLY, 0444);	if(counters == NULL)	{		DEBUG(1, ("reg_perfcount_get_counter_data: unable to open [%s].\n", fname));		return False;	}    	*data = tdb_fetch(counters, key);    	tdb_close(counters);	return True;}/******************************************************************************************************************************************/static uint32 _reg_perfcount_get_size_field(uint32 CounterType){	uint32 retval;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡不码高清免费观看| 亚洲一区av在线| 欧美精品久久一区| 欧美日韩成人综合| 3751色影院一区二区三区| 欧美日韩精品免费观看视频| 欧美久久久久免费| 日韩一级片网站| 久久夜色精品国产噜噜av| 国产三级久久久| 国产精品久久夜| 亚洲一区二区偷拍精品| 婷婷久久综合九色综合伊人色| 午夜精品免费在线观看| 老色鬼精品视频在线观看播放| 国产自产v一区二区三区c| 成人av高清在线| 欧美人牲a欧美精品| 欧美videos大乳护士334| 欧美国产日韩a欧美在线观看| 国产精品拍天天在线| 亚洲天堂精品在线观看| 日韩av电影一区| 国产成人无遮挡在线视频| 色婷婷久久一区二区三区麻豆| 欧美日韩成人综合| 久久精品视频免费| 亚洲综合丁香婷婷六月香| 精品一区二区三区蜜桃| 99久久精品免费看| 制服.丝袜.亚洲.中文.综合 | 国产精品久久久久7777按摩| 亚洲精品视频在线看| 国产一区999| 欧美日韩视频在线一区二区| 国产偷国产偷亚洲高清人白洁| 一区二区三区在线免费| 国产呦萝稀缺另类资源| 91成人网在线| 中文字幕乱码一区二区免费| 丝袜美腿高跟呻吟高潮一区| 成人av网站在线观看免费| 日韩美女在线视频| 亚洲国产精品自拍| 91在线精品一区二区三区| 日韩一区二区免费视频| 亚洲综合一区二区| 不卡在线观看av| 久久综合九色欧美综合狠狠| 亚洲国产中文字幕在线视频综合| 国产不卡在线视频| 精品国产污网站| 亚洲成人精品在线观看| 色女孩综合影院| 亚洲色图.com| 国产成人免费在线观看不卡| 日韩欧美高清dvd碟片| 五月天丁香久久| 欧美性欧美巨大黑白大战| 亚洲欧洲中文日韩久久av乱码| 福利一区福利二区| 欧美激情在线一区二区| 国产一区二区三区免费看| 精品精品国产高清a毛片牛牛 | 日韩欧美亚洲国产另类| 亚洲国产精品一区二区www在线| av动漫一区二区| 国产精品三级视频| 成人精品视频网站| 最新久久zyz资源站| 91婷婷韩国欧美一区二区| 中文字幕一区二区三区色视频 | 7777精品伊人久久久大香线蕉最新版 | 亚洲一区二区三区视频在线播放| 成人福利视频在线看| 国产精品久久久久久久久久免费看| 国产一区二区按摩在线观看| 久久综合九色综合97婷婷女人 | 日韩一区二区视频在线观看| 亚洲国产一区二区三区青草影视| 色天天综合色天天久久| 亚洲电影第三页| 91精品国产品国语在线不卡| 蜜桃一区二区三区四区| 久久这里只精品最新地址| 国产精品亚洲成人| 亚洲欧洲无码一区二区三区| 在线观看91视频| 日韩不卡在线观看日韩不卡视频| 日韩欧美国产综合| 懂色一区二区三区免费观看| 亚洲欧美综合另类在线卡通| 欧美亚洲动漫精品| 久久疯狂做爰流白浆xx| 国产欧美一区视频| 欧美偷拍一区二区| 国产一区二区三区四 | 色婷婷av一区二区三区之一色屋| 亚洲高清免费在线| 亚洲精品一区二区三区香蕉| 成人av中文字幕| 亚洲va中文字幕| 久久一区二区三区国产精品| 色综合天天综合网天天看片| 午夜欧美大尺度福利影院在线看 | 国产精品久久久久久久久久久免费看| 欧美综合久久久| 国产精品一区二区久久不卡| 一区二区三区在线不卡| 日韩欧美亚洲一区二区| 色综合久久88色综合天天| 青青青伊人色综合久久| 亚洲色图另类专区| 久久精品日韩一区二区三区| 精品视频一区 二区 三区| 国产一区二区h| 视频一区在线播放| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91精品婷婷国产综合久久性色| 国产sm精品调教视频网站| 亚洲成人免费av| 中文字幕欧美一区| 欧美精品一区二| 欧美日韩在线观看一区二区| 国产69精品久久久久毛片| 日本欧美一区二区| 夜夜嗨av一区二区三区网页| 久久精品视频在线看| 日韩一区二区在线观看| 欧美午夜精品久久久| 91啪在线观看| a4yy欧美一区二区三区| 国产高清不卡一区二区| 激情综合色综合久久| 青青草视频一区| 日韩高清在线一区| 亚洲一区二区黄色| 亚洲一区二区三区四区中文字幕| 中文字幕第一区| 国产亚洲精久久久久久| 2023国产精品视频| 欧美va亚洲va| 欧美成人三级在线| 日韩视频免费观看高清在线视频| 欧美日韩精品欧美日韩精品一| 色久综合一二码| 色婷婷综合久久久久中文| 一本到不卡免费一区二区| 色综合婷婷久久| 欧美在线影院一区二区| 欧美在线播放高清精品| 欧美亚洲精品一区| 精品视频免费看| 欧美精品日韩精品| 日韩视频永久免费| 久久婷婷国产综合精品青草| 久久综合久久久久88| 久久久精品国产免大香伊 | 日本韩国精品一区二区在线观看| 色偷偷成人一区二区三区91| 91福利视频在线| 欧美日韩亚洲综合一区二区三区| 欧美日韩一区二区三区四区| 欧美伦理影视网| 精品蜜桃在线看| 国产精品看片你懂得| 亚洲在线免费播放| 免费三级欧美电影| 成人一级片网址| 在线观看日韩国产| 欧美白人最猛性xxxxx69交| 国产亚洲精品bt天堂精选| 亚洲精选视频免费看| 丝袜美腿成人在线| 国产成人精品三级| 在线免费观看不卡av| 欧美第一区第二区| 中文字幕欧美一区| 免费在线看成人av| 成人丝袜高跟foot| 欧美日韩五月天| 中文字幕欧美激情| 午夜精品一区二区三区三上悠亚 | 91浏览器在线视频| 4hu四虎永久在线影院成人| 国产欧美日韩久久| 亚洲成人免费视频| 成人高清av在线| 日韩欧美一区二区不卡| 亚洲三级免费电影| 国产综合久久久久久鬼色 | 成人午夜av影视| 在线播放视频一区| 国产精品久久久久影视| 午夜国产精品一区| 一本到一区二区三区| 国产拍欧美日韩视频二区| 喷水一区二区三区| 欧美这里有精品| 中文字幕在线一区|