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

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

?? reg_printing.c

?? samba-3.0.22.tar.gz 編譯smb服務器的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  *  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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清免费在线| 国产亚洲精品久| ww亚洲ww在线观看国产| 国产亚洲一区二区三区| 亚洲精品老司机| 久久国产日韩欧美精品| 不卡一二三区首页| 日韩一区二区三区视频| 国产精品你懂的在线欣赏| 亚洲香肠在线观看| 国产精品99久| 欧美日韩mp4| 亚洲国产精品高清| 偷窥国产亚洲免费视频| 国产福利视频一区二区三区| 在线观看欧美日本| 久久精品欧美日韩精品| 亚洲一级二级三级| 国产99久久久久| 制服.丝袜.亚洲.中文.综合| 欧美激情一区二区三区不卡| 视频一区二区国产| 99久久99久久免费精品蜜臀| 欧美一区二区国产| 亚洲精品视频观看| 国产美女娇喘av呻吟久久| 欧美日韩激情一区二区三区| 国产午夜三级一区二区三| 亚洲成av人影院在线观看网| 成人国产亚洲欧美成人综合网| 欧美高清激情brazzers| 亚洲视频你懂的| 国产精品自拍网站| 日韩区在线观看| 亚洲国产日日夜夜| 99久久亚洲一区二区三区青草 | 亚洲特级片在线| 久久97超碰色| 欧美午夜片在线看| 亚洲特黄一级片| 粉嫩av一区二区三区粉嫩 | 国产在线播放一区三区四| 欧美专区在线观看一区| 中文字幕在线一区免费| 国内久久精品视频| 日韩三级精品电影久久久| 亚洲午夜在线视频| 色视频成人在线观看免| 日本一区二区成人在线| 国产乱国产乱300精品| 欧美岛国在线观看| 日韩精品电影一区亚洲| 欧美日韩在线综合| 亚洲亚洲人成综合网络| 色呦呦一区二区三区| 亚洲欧美综合色| a4yy欧美一区二区三区| 国产三级精品在线| 国产成人99久久亚洲综合精品| 精品国产123| 蜜桃91丨九色丨蝌蚪91桃色| 91精品国产丝袜白色高跟鞋| 丝袜国产日韩另类美女| 欧美日韩国产bt| 亚洲福利视频一区二区| 欧美性生交片4| 亚洲韩国一区二区三区| 欧美性受极品xxxx喷水| 亚洲国产精品一区二区尤物区| 91黄色小视频| 亚洲国产精品欧美一二99 | 青青草成人在线观看| 欧美日韩国产首页在线观看| 亚洲国产综合色| 欧美人妇做爰xxxⅹ性高电影 | 欧美一区二区三区免费观看视频 | 精品精品国产高清a毛片牛牛| 日本网站在线观看一区二区三区| 欧美日韩大陆在线| 日韩电影一区二区三区四区| 欧美一区二区三区播放老司机| 日本欧洲一区二区| 日韩欧美一级片| 国产伦精品一区二区三区免费| 久久影音资源网| 成人一区二区三区| 亚洲欧美国产毛片在线| 欧美日韩黄色一区二区| 久久国内精品视频| 国产亚洲综合在线| 99久久精品久久久久久清纯| 综合色中文字幕| 欧洲av在线精品| 日韩av高清在线观看| 欧美精品一区二区久久婷婷| 国产福利一区二区三区视频| 亚洲欧美日韩国产一区二区三区| 精品视频在线免费| 精品一区二区三区蜜桃| 国产精品美女久久久久久久久久久 | 国产精品拍天天在线| 色综合久久中文字幕| 亚洲大片免费看| 久久久亚洲精品石原莉奈| 91视频国产资源| 日本v片在线高清不卡在线观看| 精品国产一区久久| 91蜜桃婷婷狠狠久久综合9色| 亚洲国产精品人人做人人爽| wwwwww.欧美系列| 色999日韩国产欧美一区二区| 日韩成人av影视| 日本一区二区成人| 欧美精品丝袜中出| 国产精品一级二级三级| 亚洲一区二区在线播放相泽 | 国产经典欧美精品| 亚洲一本大道在线| 久久亚洲综合av| 91久久人澡人人添人人爽欧美| 久草在线在线精品观看| 自拍av一区二区三区| 日韩欧美一区二区在线视频| 99精品视频一区| 久久精品99国产国产精| 亚洲狼人国产精品| 欧美xxx久久| 欧美又粗又大又爽| 国产成人在线视频免费播放| 亚洲电影一级片| 国产精品乱人伦一区二区| 日韩一区二区三| 日本韩国精品一区二区在线观看| 国精产品一区一区三区mba桃花| 一区二区三区在线免费播放| 26uuuu精品一区二区| 欧美日韩在线不卡| 99久久国产综合精品色伊| 韩国三级中文字幕hd久久精品| 亚洲一区日韩精品中文字幕| 日本一区二区三区高清不卡| 91精品在线一区二区| 色一情一乱一乱一91av| 国产成人亚洲综合a∨猫咪| 日韩成人免费电影| 一二三区精品视频| 欧美国产精品中文字幕| ww久久中文字幕| 欧美一级久久久久久久大片| 91精品福利视频| 99精品视频在线观看| 国产精品538一区二区在线| 免费三级欧美电影| 香蕉影视欧美成人| 亚洲尤物在线视频观看| 中文字幕日韩欧美一区二区三区| 久久久精品2019中文字幕之3| 日韩一区二区三| 欧美一区二区在线不卡| 欧美三级中文字幕在线观看| 91亚洲精品一区二区乱码| 成人免费毛片嘿嘿连载视频| 国模冰冰炮一区二区| 另类小说色综合网站| 日韩和欧美一区二区三区| 一区二区三区蜜桃网| 18涩涩午夜精品.www| 国产精品久久精品日日| 中文字幕不卡的av| 欧美国产欧美综合| 中文字幕成人网| 国产精品美日韩| 亚洲欧洲精品一区二区精品久久久| 国产日产亚洲精品系列| 久久久久国产精品麻豆| 久久精品视频一区| 国产日韩欧美制服另类| 国产午夜精品一区二区三区嫩草| 久久久精品影视| 欧美精彩视频一区二区三区| 欧美激情一区二区三区| 国产精品剧情在线亚洲| 国产精品成人在线观看| 国产精品久久三| 亚洲视频电影在线| 亚洲欧美日韩人成在线播放| 艳妇臀荡乳欲伦亚洲一区| 亚洲va天堂va国产va久| 舔着乳尖日韩一区| 蜜桃久久精品一区二区| 国产在线精品免费av| 国产精品996| 99久久免费视频.com| 北岛玲一区二区三区四区| 97久久精品人人澡人人爽| 欧美在线视频不卡| 正在播放一区二区| 久久九九99视频| 亚洲欧洲三级电影| 亚洲v日本v欧美v久久精品|