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

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

?? reg_printing.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) 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 registry virtual views for printing information */#include "includes.h"#undef DBGC_CLASS#define DBGC_CLASS DBGC_RPC_SRV/* registrt paths used in the print_registry[] */#define KEY_MONITORS		"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/MONITORS"#define KEY_FORMS		"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/FORMS"#define KEY_CONTROL_PRINTERS	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/PRINTERS"#define KEY_ENVIRONMENTS	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/ENVIRONMENTS"#define KEY_CONTROL_PRINT	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT"#define KEY_WINNT_PRINTERS	"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT/PRINTERS"#define KEY_WINNT_PRINT		"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT"#define KEY_PORTS		"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PORTS"/* callback table for various registry paths below the ones we service in this module */	struct reg_dyn_tree {	/* full key path in normalized form */	const char *path;		/* callbscks for fetch/store operations */	int ( *fetch_subkeys) ( const char *path, REGSUBKEY_CTR *subkeys );	BOOL (*store_subkeys) ( const char *path, REGSUBKEY_CTR *subkeys );	int  (*fetch_values)  ( const char *path, REGVAL_CTR *values );	BOOL (*store_values)  ( const char *path, REGVAL_CTR *values );};/********************************************************************* ********************************************************************* ** Utility Functions ********************************************************************* *********************************************************************//*********************************************************************** simple function to prune a pathname down to the basename of a file  **********************************************************************/ static char* dos_basename ( char *path ){	char *p;		if ( !(p = strrchr( path, '\\' )) )		p = path;	else		p++;			return p;}/********************************************************************* ********************************************************************* ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/FORMS" ********************************************************************* *********************************************************************/static int key_forms_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys ){	char *p = reg_remaining_path( key + strlen(KEY_FORMS) );		/* no keys below Forms */		if ( p )		return -1;			return 0;}/********************************************************************** *********************************************************************/static int key_forms_fetch_values( const char *key, REGVAL_CTR *values ){	uint32 		data[8];	int		i, num_values, form_index = 1;	nt_forms_struct *forms_list = NULL;	nt_forms_struct *form;			DEBUG(10,("print_values_forms: key=>[%s]\n", key ? key : "NULL" ));		num_values = get_ntforms( &forms_list );			DEBUG(10,("hive_forms_fetch_values: [%d] user defined forms returned\n",		num_values));	/* handle user defined forms */					for ( i=0; i<num_values; i++ ) {		form = &forms_list[i];					data[0] = form->width;		data[1] = form->length;		data[2] = form->left;		data[3] = form->top;		data[4] = form->right;		data[5] = form->bottom;		data[6] = form_index++;		data[7] = form->flag;					regval_ctr_addvalue( values, form->name, REG_BINARY, (char*)data, sizeof(data) );		}			SAFE_FREE( forms_list );	forms_list = NULL;			/* handle built-on forms */			num_values = get_builtin_ntforms( &forms_list );			DEBUG(10,("print_subpath_values_forms: [%d] built-in forms returned\n",		num_values));				for ( i=0; i<num_values; i++ ) {		form = &forms_list[i];					data[0] = form->width;		data[1] = form->length;		data[2] = form->left;		data[3] = form->top;		data[4] = form->right;		data[5] = form->bottom;		data[6] = form_index++;		data[7] = form->flag;							regval_ctr_addvalue( values, form->name, REG_BINARY, (char*)data, sizeof(data) );	}			SAFE_FREE( forms_list );		return regval_ctr_numvals( values );}/********************************************************************* ********************************************************************* ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/PRINTERS" ** "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT/PRINTERS" ********************************************************************* *********************************************************************//********************************************************************* strip off prefix for printers key.  DOes return a pointer to static  memory. *********************************************************************/static char* strip_printers_prefix( const char *key ){	char *subkeypath;	pstring path;		pstrcpy( path, key );	normalize_reg_path( path );	/* normalizing the path does not change length, just key delimiters and case */	if ( strncmp( path, KEY_WINNT_PRINTERS, strlen(KEY_WINNT_PRINTERS) ) == 0 )		subkeypath = reg_remaining_path( key + strlen(KEY_WINNT_PRINTERS) );	else		subkeypath = reg_remaining_path( key + strlen(KEY_CONTROL_PRINTERS) );			return subkeypath;}/********************************************************************* *********************************************************************/ static int key_printers_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys ){	int n_services = lp_numservices();		int snum;	fstring sname;	int i;	int num_subkeys = 0;	char *printers_key;	char *printername, *printerdatakey;	NT_PRINTER_INFO_LEVEL *printer = NULL;	fstring *subkey_names = NULL;		DEBUG(10,("key_printers_fetch_keys: key=>[%s]\n", key ? key : "NULL" ));		printers_key = strip_printers_prefix( key );			if ( !printers_key ) {		/* enumerate all printers */				for (snum=0; snum<n_services; snum++) {			if ( !(lp_snum_ok(snum) && lp_print_ok(snum) ) )				continue;			/* don't report the [printers] share */			if ( strequal( lp_servicename(snum), PRINTERS_NAME ) )				continue;							fstrcpy( sname, lp_servicename(snum) );							regsubkey_ctr_addkey( subkeys, sname );		}				num_subkeys = regsubkey_ctr_numkeys( subkeys );		goto done;	}	/* get information for a specific printer */		reg_split_path( printers_key, &printername, &printerdatakey );	/* validate the printer name */	for (snum=0; snum<n_services; snum++) {		if ( !lp_snum_ok(snum) || !lp_print_ok(snum) )			continue;		if (strequal( lp_servicename(snum), printername ) )			break;	}	if ( snum>=n_services		|| !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) ) 	{		return -1;	}	num_subkeys = get_printer_subkeys( printer->info_2->data, printerdatakey?printerdatakey:"", &subkey_names );		for ( i=0; i<num_subkeys; i++ )		regsubkey_ctr_addkey( subkeys, subkey_names[i] );		free_a_printer( &printer, 2 );				/* no other subkeys below here */done:		SAFE_FREE( subkey_names );		return num_subkeys;}/********************************************************************** Take a list of names and call add_printer_hook() if necessary Note that we do this a little differently from Windows since the  keyname is the sharename and not the printer name. *********************************************************************/static BOOL add_printers_by_registry( REGSUBKEY_CTR *subkeys ){	int i, num_keys, snum;	char *printername;	NT_PRINTER_INFO_LEVEL_2 info2;	NT_PRINTER_INFO_LEVEL printer;		ZERO_STRUCT( info2 );	printer.info_2 = &info2;		num_keys = regsubkey_ctr_numkeys( subkeys );		become_root();	for ( i=0; i<num_keys; i++ ) {		printername = regsubkey_ctr_specific_key( subkeys, i );		snum = find_service( printername );				/* just verify a valied snum for now */		if ( snum == -1 ) {			fstrcpy( info2.printername, printername );			fstrcpy( info2.sharename, printername );			if ( !add_printer_hook( NULL, &printer ) ) {				DEBUG(0,("add_printers_by_registry: Failed to add printer [%s]\n",					printername));			}			}	}	unbecome_root();	return True;}/********************************************************************** *********************************************************************/static BOOL key_printers_store_keys( const char *key, REGSUBKEY_CTR *subkeys ){	char *printers_key;	char *printername, *printerdatakey;	NT_PRINTER_INFO_LEVEL *printer = NULL;	int i, num_subkeys, num_existing_keys;	char *subkeyname;	fstring *existing_subkeys = NULL;		printers_key = strip_printers_prefix( key );		if ( !printers_key ) {		/* have to deal with some new or deleted printer */		return add_printers_by_registry( subkeys );	}		reg_split_path( printers_key, &printername, &printerdatakey );		/* lookup the printer */		if ( !W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, printername)) ) {		DEBUG(0,("key_printers_store_keys: Tried to store subkey for bad printername %s\n", 			printername));		return False;	}		/* get the top level printer keys */		num_existing_keys = get_printer_subkeys( printer->info_2->data, "", &existing_subkeys );		for ( i=0; i<num_existing_keys; i++ ) {			/* remove the key if it has been deleted */				if ( !regsubkey_ctr_key_exists( subkeys, existing_subkeys[i] ) ) {			DEBUG(5,("key_printers_store_keys: deleting key %s\n", 				existing_subkeys[i]));			delete_printer_key( printer->info_2->data, existing_subkeys[i] );		}	}	num_subkeys = regsubkey_ctr_numkeys( subkeys );	for ( i=0; i<num_subkeys; i++ ) {		subkeyname = regsubkey_ctr_specific_key(subkeys, i);		/* add any missing printer keys */		if ( lookup_printerkey(printer->info_2->data, subkeyname) == -1 ) {			DEBUG(5,("key_printers_store_keys: adding key %s\n", 				existing_subkeys[i]));			if ( add_new_printer_key( printer->info_2->data, subkeyname ) == -1 ) 				return False;		}	}		/* write back to disk */		mod_a_printer( printer, 2 );		/* cleanup */		if ( printer )		free_a_printer( &printer, 2 );	return True;}/********************************************************************** *********************************************************************/static void fill_in_printer_values( NT_PRINTER_INFO_LEVEL_2 *info2, REGVAL_CTR *values ){	DEVICEMODE	*devmode;	prs_struct	prs;	uint32		offset;	UNISTR2		data;	char 		*p;	uint32 printer_status = PRINTER_STATUS_OK;	int snum;		regval_ctr_addvalue( values, "Attributes",       REG_DWORD, (char*)&info2->attributes,       sizeof(info2->attributes) );	regval_ctr_addvalue( values, "Priority",         REG_DWORD, (char*)&info2->priority,         sizeof(info2->attributes) );	regval_ctr_addvalue( values, "ChangeID",         REG_DWORD, (char*)&info2->changeid,         sizeof(info2->changeid) );	regval_ctr_addvalue( values, "Default Priority", REG_DWORD, (char*)&info2->default_priority, sizeof(info2->default_priority) );		/* lie and say everything is ok since we don't want to call print_queue_length() to get the real status */	regval_ctr_addvalue( values, "Status",           REG_DWORD, (char*)&printer_status,          sizeof(info2->status) );	regval_ctr_addvalue( values, "StartTime",        REG_DWORD, (char*)&info2->starttime,        sizeof(info2->starttime) );	regval_ctr_addvalue( values, "UntilTime",        REG_DWORD, (char*)&info2->untiltime,        sizeof(info2->untiltime) );	/* strip the \\server\ from this string */	if ( !(p = strrchr( info2->printername, '\\' ) ) )		p = info2->printername;	else		p++;	init_unistr2( &data, p, UNI_STR_TERMINATE);	regval_ctr_addvalue( values, "Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );	init_unistr2( &data, info2->location, UNI_STR_TERMINATE);	regval_ctr_addvalue( values, "Location", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );	init_unistr2( &data, info2->comment, UNI_STR_TERMINATE);	regval_ctr_addvalue( values, "Description", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );	init_unistr2( &data, info2->parameters, UNI_STR_TERMINATE);	regval_ctr_addvalue( values, "Parameters", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );	init_unistr2( &data, info2->portname, UNI_STR_TERMINATE);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品大片www| 精品久久一区二区三区| 蜜桃视频一区二区三区| 国产午夜精品一区二区| 久久久久久久综合色一本| 亚洲六月丁香色婷婷综合久久 | 精品国产凹凸成av人网站| 国产精品网站在线| 奇米在线7777在线精品| 久久精品亚洲精品国产欧美kt∨| 成人中文字幕电影| 一区在线观看免费| 777奇米成人网| 国产一区二三区好的| 国产精品拍天天在线| 成人18精品视频| 男女视频一区二区| 国产午夜精品在线观看| 欧美亚洲一区二区三区四区| 久久国产精品99精品国产| 久久精品人人做人人爽人人| 91蜜桃在线免费视频| 精品伊人久久久久7777人| 一区二区三区在线免费视频| 日韩亚洲欧美一区二区三区| 91碰在线视频| 成人av在线资源网站| 日韩精品成人一区二区在线| 亚洲色图视频网| 自拍偷拍国产亚洲| 国产欧美日韩另类一区| 欧美成va人片在线观看| 欧美一区二区三区日韩视频| 在线看日本不卡| 日韩欧美一二三区| 欧美无砖砖区免费| 精品国产免费视频| 国产欧美日韩麻豆91| 五月天国产精品| 欧美日本乱大交xxxxx| 精品日韩成人av| 国产suv一区二区三区88区| 亚洲综合视频在线观看| 亚洲免费观看高清完整版在线观看 | 国产91色综合久久免费分享| 国产日韩欧美高清| 国产iv一区二区三区| 久久精品一区二区| 亚洲色图色小说| 中文字幕一区视频| 一区二区三区中文在线| 亚洲gay无套男同| 国产在线视频精品一区| 国产高清在线观看免费不卡| 蜜桃视频一区二区三区| 精品一区在线看| 97久久久精品综合88久久| 色屁屁一区二区| 欧美精品三级在线观看| 日韩欧美亚洲一区二区| 最新国产の精品合集bt伙计| 亚洲欧美国产三级| 美女国产一区二区三区| 国产精品77777竹菊影视小说| 国产麻豆精品一区二区| 91片黄在线观看| 2023国产精品视频| 麻豆国产精品官网| 91一区二区三区在线观看| 日韩欧美在线不卡| 日韩精品电影在线观看| 97精品超碰一区二区三区| 国产精品毛片高清在线完整版| 亚洲欧洲成人精品av97| 不卡的av电影| 日韩电影免费在线看| 欧美猛男男办公室激情| 国产成人一级电影| 亚洲码国产岛国毛片在线| 日韩不卡一区二区| 亚洲一区二区黄色| 日韩精品一区二区三区蜜臀| 色综合久久久久综合体| 色婷婷亚洲综合| 国产成人亚洲综合a∨婷婷图片| 亚洲欧美一区二区三区久本道91| 日韩一区二区电影网| 色吧成人激情小说| 国产一区二区在线电影| 亚洲一区二区精品视频| 亚洲欧美怡红院| 精品成人a区在线观看| 欧美日韩成人在线一区| 亚洲人成小说网站色在线 | 欧美日韩一卡二卡三卡| 午夜精品123| 欧美一区二区三区影视| 蜜桃久久精品一区二区| 久久精品一区八戒影视| 95精品视频在线| 日韩精品乱码av一区二区| 精品国产在天天线2019| 成人午夜电影久久影院| 一色桃子久久精品亚洲| 一本色道亚洲精品aⅴ| 久久伊99综合婷婷久久伊| 麻豆国产精品一区二区三区 | 日韩高清一区在线| 国产九色sp调教91| 国产视频一区二区三区在线观看| 欧美aaaaaa午夜精品| 久久久精品综合| 色哟哟一区二区| 亚洲第一会所有码转帖| 777久久久精品| 国产v日产∨综合v精品视频| 亚洲精选视频免费看| 色综合激情久久| 国产福利一区二区三区在线视频| 亚洲天堂精品在线观看| 国产欧美精品在线观看| 精品福利av导航| 久久综合久久综合九色| 欧美精品一区二区三区很污很色的| 成人免费av资源| 欧美国产日韩一二三区| 免费观看在线色综合| 亚洲色图欧洲色图| 加勒比av一区二区| 91精品国产综合久久福利软件| 国产成人亚洲精品狼色在线| 美国av一区二区| 日本午夜一区二区| 另类的小说在线视频另类成人小视频在线| 国产精品久久午夜| 精品国产一区二区在线观看| 国产视频一区二区在线观看| 国产欧美精品在线观看| 国产午夜精品久久久久久久| 制服.丝袜.亚洲.中文.综合| 日韩一级片在线播放| 丰满白嫩尤物一区二区| 免费在线看成人av| 亚洲一级二级三级在线免费观看| 国产片一区二区| 国产午夜亚洲精品不卡| 久久影音资源网| 欧美精品一区二区蜜臀亚洲| 欧美日韩不卡一区二区| 欧美最新大片在线看| av不卡一区二区三区| 成人免费av资源| 国产乱码精品一品二品| 国产综合色在线视频区| 久色婷婷小香蕉久久| 亚洲成人久久影院| 麻豆一区二区在线| 韩国欧美国产一区| 丁香婷婷综合五月| 91美女视频网站| 欧美日韩中文字幕精品| 91麻豆swag| 3atv在线一区二区三区| 日韩精品一区二区三区视频| 久久综合久久综合九色| 中文字幕欧美国产| 午夜电影一区二区| 国产ts人妖一区二区| 色综合久久99| 欧美一区二区在线看| 精品国产髙清在线看国产毛片| 国产精品久久久久久久浪潮网站| 国产高清成人在线| 久久伊99综合婷婷久久伊| 国产精品一色哟哟哟| 国产女同性恋一区二区| av中文字幕亚洲| 中文字幕亚洲一区二区va在线| 91首页免费视频| 欧美日韩一区久久| 欧美xxxxxxxx| 蜜臀久久久99精品久久久久久| 亚洲欧美另类综合偷拍| 国产精品成人午夜| 亚洲欧美日韩精品久久久久| 国产精品麻豆欧美日韩ww| 亚洲国产aⅴ天堂久久| 国产在线播放一区| 欧美一区国产二区| 精品久久久久99| 免费精品视频在线| 91极品美女在线| 国产视频一区二区在线观看| 亚洲aⅴ怡春院| 欧美日韩在线播放| ㊣最新国产の精品bt伙计久久| 九一九一国产精品| 国产精品一二三区| 亚洲欧美日韩综合aⅴ视频| 成人性生交大片免费看视频在线|