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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? reg_db.c

?? samba-3.0.22.tar.gz 編譯smb服務器的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  *  Unix SMB/CIFS implementation. *  Virtual Windows Registry Layer *  Copyright (C) Gerald Carter                     2002-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. *//* Implementation of internal registry database functions. */#include "includes.h"#undef DBGC_CLASS#define DBGC_CLASS DBGC_RPC_SRVstatic TDB_CONTEXT *tdb_reg;static int tdb_refcount;#define VALUE_PREFIX	"SAMBA_REGVAL"/* List the deepest path into the registry.  All part components will be created.*//* If you want to have a part of the path controlled by the tdb and part by   a virtual registry db (e.g. printing), then you have to list the deepest path.   For example,"HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Print"    allows the reg_db backend to handle everything up to    "HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion" and then we'll hook    the reg_printing backend onto the last component of the path (see    KEY_PRINTING_2K in include/rpc_reg.h)   --jerry */static const char *builtin_registry_paths[] = {	KEY_PRINTING_2K,	KEY_PRINTING_PORTS,	KEY_PRINTING,	KEY_SHARES,	KEY_EVENTLOG,	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib",	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009",	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors",	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions",	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\DefaultUserConfiguration",	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters",	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",	"HKU",	"HKCR",	"HKPD",	"HKPT",	 NULL };struct builtin_regkey_value {	const char *path;	const char *valuename;	uint32 type;	union {		const char *string;		uint32 dw_value;	} data;};static struct builtin_regkey_value builtin_registry_values[] = {	{ KEY_PRINTING_PORTS,		SAMBA_PRINTER_PORT_NAME, REG_SZ, { "" } },	{ KEY_PRINTING_2K,		"DefaultSpoolDirectory", REG_SZ, { "C:\\Windows\\System32\\Spool\\Printers" } },	{ KEY_EVENTLOG,		"DisplayName", REG_SZ, { "Event Log" } }, 	{ KEY_EVENTLOG,		"ErrorControl", REG_DWORD, { (char*)0x00000001 } },	{ NULL, NULL, 0, { NULL } }};#define REGVER_V1	1	/* first db version with write support */	/*********************************************************************** Open the registry data in the tdb ***********************************************************************/ static BOOL init_registry_data( void ){	pstring path, base, remaining;	fstring keyname, subkeyname;	REGSUBKEY_CTR *subkeys;	REGVAL_CTR *values;	int i;	const char *p, *p2;	UNISTR2 data;		/* loop over all of the predefined paths and add each component */		for ( i=0; builtin_registry_paths[i] != NULL; i++ ) {		DEBUG(6,("init_registry_data: Adding [%s]\n", builtin_registry_paths[i]));		pstrcpy( path, builtin_registry_paths[i] );		pstrcpy( base, "" );		p = path;				while ( next_token(&p, keyname, "\\", sizeof(keyname)) ) {					/* build up the registry path from the components */						if ( *base )				pstrcat( base, "\\" );			pstrcat( base, keyname );						/* get the immediate subkeyname (if we have one ) */						*subkeyname = '\0';			if ( *p ) {				pstrcpy( remaining, p );				p2 = remaining;								if ( !next_token(&p2, subkeyname, "\\", sizeof(subkeyname)) )					fstrcpy( subkeyname, p2 );			}			DEBUG(10,("init_registry_data: Storing key [%s] with subkey [%s]\n",				base, *subkeyname ? subkeyname : "NULL"));						/* we don't really care if the lookup succeeds or not since			   we are about to update the record.  We just want any 			   subkeys already present */						if ( !(subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR )) ) {				DEBUG(0,("talloc() failure!\n"));				return False;			}			regdb_fetch_keys( base, subkeys );			if ( *subkeyname ) 				regsubkey_ctr_addkey( subkeys, subkeyname );			if ( !regdb_store_keys( base, subkeys ))				return False;						TALLOC_FREE( subkeys );		}	}	/* loop over all of the predefined values and add each component */		for ( i=0; builtin_registry_values[i].path != NULL; i++ ) {		if ( !(values = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {			DEBUG(0,("talloc() failure!\n"));			return False;		}		regdb_fetch_values( builtin_registry_values[i].path, values );		/* preserve existing values across restarts.  Only add new ones */		if ( !regval_ctr_key_exists( values, builtin_registry_values[i].valuename ) ) 		{			switch( builtin_registry_values[i].type ) {			case REG_DWORD:				regval_ctr_addvalue( values, 				                     builtin_registry_values[i].valuename,						     REG_DWORD,						     (char*)&builtin_registry_values[i].data.dw_value,						     sizeof(uint32) );				break;							case REG_SZ:				init_unistr2( &data, builtin_registry_values[i].data.string, UNI_STR_TERMINATE);				regval_ctr_addvalue( values, 				                     builtin_registry_values[i].valuename,						     REG_SZ,						     (char*)data.buffer,						     data.uni_str_len*sizeof(uint16) );				break;						default:				DEBUG(0,("init_registry_data: invalid value type in builtin_registry_values [%d]\n",					builtin_registry_values[i].type));			}			regdb_store_values( builtin_registry_values[i].path, values );		}				TALLOC_FREE( values );	}		return True;}/*********************************************************************** Open the registry database ***********************************************************************/ BOOL regdb_init( void ){	const char *vstring = "INFO/version";	uint32 vers_id;	if ( tdb_reg )		return True;	if ( !(tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600)) )	{		tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);		if ( !tdb_reg ) {			DEBUG(0,("regdb_init: Failed to open registry %s (%s)\n",				lock_path("registry.tdb"), strerror(errno) ));			return False;		}				DEBUG(10,("regdb_init: Successfully created registry tdb\n"));	}	tdb_refcount = 1;			vers_id = tdb_fetch_int32(tdb_reg, vstring);	if ( vers_id != REGVER_V1 ) {		/* any upgrade code here if needed */	}	/* always setup the necessary keys and values */	if ( !init_registry_data() ) {		DEBUG(0,("init_registry: Failed to initiailize data in registry!\n"));		return False;	}	return True;}/*********************************************************************** Open the registry.  Must already have been initialized by regdb_init() ***********************************************************************/WERROR regdb_open( void ){	WERROR result = WERR_OK;	if ( tdb_reg ) {		DEBUG(10,("regdb_open: incrementing refcount (%d)\n", tdb_refcount));		tdb_refcount++;		return WERR_OK;	}		become_root();	tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);	if ( !tdb_reg ) {		result = ntstatus_to_werror( map_nt_error_from_unix( errno ) );		DEBUG(0,("regdb_open: Failed to open %s! (%s)\n", 			lock_path("registry.tdb"), strerror(errno) ));	}	unbecome_root();	tdb_refcount = 1;	DEBUG(10,("regdb_open: refcount reset (%d)\n", tdb_refcount));	return result;}/*********************************************************************** ***********************************************************************/int regdb_close( void ){	int ret;	tdb_refcount--;	DEBUG(10,("regdb_close: decrementing refcount (%d)\n", tdb_refcount));	if ( tdb_refcount > 0 )		return 0;	SMB_ASSERT( tdb_refcount >= 0 );	ret = tdb_close( tdb_reg );	tdb_reg = NULL;	return ret;}/*********************************************************************** Add subkey strings to the registry tdb under a defined key fmt is the same format as tdb_pack except this function only supports fstrings ***********************************************************************/ static BOOL regdb_store_keys_internal( const char *key, REGSUBKEY_CTR *ctr ){	TDB_DATA kbuf, dbuf;	char *buffer, *tmpbuf;	int i = 0;	uint32 len, buflen;	BOOL ret = True;	uint32 num_subkeys = regsubkey_ctr_numkeys( ctr );	pstring keyname;		if ( !key )		return False;	pstrcpy( keyname, key );	normalize_reg_path( keyname );	/* allocate some initial memory */			buffer = SMB_MALLOC(sizeof(pstring));	buflen = sizeof(pstring);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
caoporm超碰国产精品| 亚洲制服丝袜在线| 717成人午夜免费福利电影| 91亚洲精品久久久蜜桃网站 | 久久99热国产| 日韩福利视频网| 日韩高清国产一区在线| 日韩精品色哟哟| 日本欧美在线看| 美女免费视频一区二区| 日韩国产在线一| 日韩成人精品在线观看| 精品一区二区三区香蕉蜜桃| 日韩精彩视频在线观看| 日本欧美一区二区| 乱中年女人伦av一区二区| 激情文学综合网| 国产成人精品亚洲午夜麻豆| eeuss影院一区二区三区| 91视频国产资源| 欧美年轻男男videosbes| 欧美福利电影网| 精品美女被调教视频大全网站| 日韩美一区二区三区| 久久精品亚洲精品国产欧美| 最新热久久免费视频| 亚洲一二三区在线观看| 蓝色福利精品导航| 成熟亚洲日本毛茸茸凸凹| 色综合亚洲欧洲| 制服丝袜成人动漫| 久久精品夜夜夜夜久久| 亚洲影院久久精品| 国产一区二区0| 色综合视频一区二区三区高清| 欧美性色aⅴ视频一区日韩精品| 欧美高清精品3d| 国产精品第五页| 日韩精品一级中文字幕精品视频免费观看| 美女看a上一区| 91亚洲国产成人精品一区二三| 欧美日韩一区久久| 国产三级久久久| 日韩精品电影在线| 9人人澡人人爽人人精品| 欧美日韩一区视频| 中文字幕永久在线不卡| 久久国产精品一区二区| 欧美撒尿777hd撒尿| 久久精品亚洲一区二区三区浴池| 亚洲一区二区不卡免费| 成人国产精品视频| 制服丝袜成人动漫| 一区二区三区精品久久久| 成人久久18免费网站麻豆 | 欧美一区二区三区视频在线| 国产精品视频一二| 国产在线国偷精品免费看| 欧美视频在线一区二区三区 | 午夜天堂影视香蕉久久| 成人免费观看av| 久久精品亚洲乱码伦伦中文| 青青国产91久久久久久| 欧美日韩美女一区二区| 国产精品福利一区| 国产成人啪免费观看软件 | 成人一级片网址| 久久在线免费观看| 美女视频黄频大全不卡视频在线播放 | 欧美经典三级视频一区二区三区| 性做久久久久久| 91精品办公室少妇高潮对白| 国产精品萝li| av电影在线观看完整版一区二区| 久久日韩精品一区二区五区| 麻豆freexxxx性91精品| 日韩一卡二卡三卡四卡| 日韩—二三区免费观看av| 欧美美女激情18p| 天天影视涩香欲综合网| 91麻豆精品国产91久久久| 日韩精品乱码av一区二区| 欧美蜜桃一区二区三区| 午夜欧美2019年伦理| 欧美久久久一区| 免费视频一区二区| 欧美大肚乱孕交hd孕妇| 国产综合久久久久影院| 国产日产亚洲精品系列| 成人h精品动漫一区二区三区| 国产欧美日韩麻豆91| 99九九99九九九视频精品| 亚洲色图视频网| 色婷婷av一区二区三区软件 | 日韩一级大片在线观看| 久久99热国产| 国产欧美日韩在线观看| 成人av在线一区二区三区| 亚洲色图制服诱惑| 91麻豆精品国产91久久久久久| 免费xxxx性欧美18vr| 久久一夜天堂av一区二区三区| 国产精品香蕉一区二区三区| 中文字幕中文字幕在线一区 | 91首页免费视频| 午夜电影网一区| 久久综合色8888| 色久优优欧美色久优优| 理论电影国产精品| 综合久久久久综合| 日韩欧美在线综合网| 成人激情黄色小说| 99久久免费精品| 日本午夜精品视频在线观看 | 亚洲国产一区在线观看| 日韩欧美电影一二三| 成人sese在线| 久久丁香综合五月国产三级网站| 国产精品嫩草影院com| 日韩午夜电影在线观看| 一本色道综合亚洲| 国产乱码精品一区二区三区五月婷| 国产精品蜜臀av| 日韩精品一区二区三区视频播放 | 精品91自产拍在线观看一区| 成人午夜在线视频| 免费一级欧美片在线观看| 亚洲精品中文在线| 久久久久久99精品| 日韩亚洲欧美成人一区| 91福利在线看| 成人a免费在线看| 国产精品一区久久久久| 日本欧美一区二区三区| 亚洲精选一二三| 国产精品理论片在线观看| 日韩视频免费观看高清完整版在线观看| 99久久99久久精品免费观看| 国产一区二区在线电影| 日本不卡一二三| 三级一区在线视频先锋| 亚洲一区二区三区激情| 自拍偷拍欧美精品| 中文字幕精品—区二区四季| 精品久久久久久最新网址| 7777精品伊人久久久大香线蕉的 | 成人免费高清视频在线观看| 日韩av一区二区三区| 一级日本不卡的影视| 国产精品国产成人国产三级| 久久久不卡网国产精品一区| 精品国精品自拍自在线| 欧美精品日韩精品| 欧美日韩免费不卡视频一区二区三区| 色又黄又爽网站www久久| 99久久精品国产一区| 成人黄色电影在线 | 一区二区三区不卡在线观看| 国产精品久久久久久久久果冻传媒 | 欧美大肚乱孕交hd孕妇| 91精品国产91热久久久做人人| 欧美日韩中文另类| 欧美一级黄色片| 日韩欧美中文一区| 日韩精品最新网址| 久久天堂av综合合色蜜桃网| 久久久精品tv| 国产精品国产三级国产有无不卡 | 国产精品视频一二三区| 中文字幕一区在线观看| 亚洲欧洲制服丝袜| 亚洲高清免费一级二级三级| 日韩在线a电影| 国产精品18久久久久久久久 | 亚洲欧美另类久久久精品| 亚洲视频一二区| 日韩成人伦理电影在线观看| 久久精品久久99精品久久| 国产成人亚洲精品狼色在线| 91原创在线视频| 69久久夜色精品国产69蝌蚪网| 精品国产凹凸成av人网站| 国产精品青草久久| 亚洲自拍另类综合| 久久精品久久99精品久久| www.av亚洲| 91精品在线观看入口| 欧美激情一区二区三区蜜桃视频| 亚洲精品视频一区二区| 久久99热狠狠色一区二区| 91亚洲国产成人精品一区二区三 | 国产日本欧洲亚洲| 亚洲男人的天堂在线aⅴ视频| 天天爽夜夜爽夜夜爽精品视频| 国产福利一区二区| 3d动漫精品啪啪一区二区竹菊| 国产精品美女www爽爽爽| 男女男精品网站| 色8久久精品久久久久久蜜| 久久久亚洲国产美女国产盗摄|