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

📄 iis.cpp

📁 RESIN 3.2 最新源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1999-2004 Caucho Technology.  All rights reserved. * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source 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. * * Resin Open Source 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, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */#define UNICODE#define INITGUID#include <windows.h>#include <cguid.h>#include <stdio.h>#include "iadmw.h"#include "iiscnfg.h" #include "atlBase.h" #include "setup.h"#define IIS_SERVICE "W3SVC"#define IIS_ROOTS "System\\CurrentControlSet\\Services\\W3SVC\\Parameters\\Virtual Roots"#define IIS_PARAM "System\\CurrentControlSet\\Services\\W3SVC\\Parameters"static intget_string(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int userType, int code, char *data){	HRESULT hRes = 0; 	DWORD indx = 0; 	DWORD len = 0;	METADATA_RECORD MyData;	TCHAR Data[64 * 1024];	MyData.dwMDIdentifier = code;	MyData.dwMDAttributes = METADATA_INHERIT;	MyData.dwMDUserType = userType;	MyData.dwMDDataType = STRING_METADATA;	MyData.dwMDDataLen = sizeof(Data);	MyData.pbMDData = (unsigned char *) Data;	len = sizeof(Data);	hRes = pIMeta->GetData(MyHandle, path, &MyData, &len); 	if (FAILED(hRes)) {		return -1;	}	wcstombs(data, Data, sizeof(Data));	return MyData.dwMDDataLen;}static intadd_multi_string(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int userType, int code, char *data){	HRESULT hRes = 0; 	DWORD indx = 0; 	DWORD len = 0;	METADATA_RECORD MyData;	TCHAR Data[64 * 1024];	TCHAR newData[1024];	int newLen = (strlen(data) + 1) * sizeof(TCHAR);	mbstowcs(newData, data, 256);	MyData.dwMDIdentifier = code;	MyData.dwMDAttributes = METADATA_INHERIT;	MyData.dwMDUserType = userType;	MyData.dwMDDataType = MULTISZ_METADATA;	MyData.dwMDDataLen = sizeof(Data);	MyData.pbMDData = (unsigned char *) Data;	len = sizeof(Data);	hRes = pIMeta->GetData(MyHandle, path, &MyData, &len); 	if (FAILED(hRes)) {		return -1;	}	TCHAR *ptr;	for (ptr = Data; *ptr; ptr += wcslen(ptr) + 1) {		if (! memcmp(ptr, newData, newLen)) {			return -1;		}	}	memcpy(ptr, newData, newLen);	ptr[newLen + 1] = 0;	MyData.dwMDDataLen += newLen;	hRes = pIMeta->SetData(MyHandle, path, &MyData); 	return MyData.dwMDDataLen;}static intget_iis_script_dir_from_metabase(char *dir){	HRESULT hRes = 0; 	DWORD indx = 0; 	DWORD len = 0;	METADATA_HANDLE MyHandle; 	CComPtr <IMSAdminBase> pIMeta;  	*dir = 0;	CoInitialize(0);	hRes = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,							IID_IMSAdminBase, (void **) &pIMeta);		if (FAILED(hRes)) {		return 0;	}	//get a handle to the local machine 	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, TEXT("/LM/W3SVC/1/ROOT/SCRIPTS"),						   METADATA_PERMISSION_READ, 20, &MyHandle); 	int result = -1;	if (! FAILED(hRes)) {		result = get_string(pIMeta, MyHandle, TEXT("/"), IIS_MD_UT_FILE, MD_VR_PATH, dir);	}	pIMeta->CloseKey(MyHandle);	if (result > 0)	  return result;		//get a handle to the local machine 	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, TEXT("/LM/W3SVC/1/ROOT"),						   METADATA_PERMISSION_READ, 20, &MyHandle); 	if (! FAILED(hRes)) {	  char *tail;	  		result = get_string(pIMeta, MyHandle, TEXT("/"), IIS_MD_UT_FILE, MD_VR_PATH, dir);		tail = strrchr(dir, '\\');		if (tail)		  *tail = 0;		else {		  tail = strrchr(dir, '/');		  if (tail)		    *tail = 0;		}		strcat(dir, "\\scripts");	}	pIMeta->CloseKey(MyHandle);	return result > 0;}static HKEYreg_lookup(HKEY hkey, TCHAR *path){	HKEY newKey;	DWORD rc;	rc = RegOpenKeyEx(hkey, path, 0, KEY_QUERY_VALUE, &newKey);	if (rc != ERROR_SUCCESS)		return 0;	return newKey;}static char *reg_query_string(HKEY key, TCHAR *subkey, char *value){	TCHAR buf[1024];	DWORD len = sizeof buf;	DWORD type;	int rc = RegQueryValueEx(key, subkey, 0, &type, (LPBYTE) buf, &len);	if (rc != ERROR_SUCCESS || type != REG_SZ)		return 0;	wcstombs(value, buf, 1024);	return value;}intget_iis_script_dir(char *dir){	*dir = 0;	if (get_iis_script_dir_from_metabase(dir)) {		return 1;	}	HKEY hKeyRoot = reg_lookup(HKEY_LOCAL_MACHINE, TEXT(IIS_ROOTS));	if (! hKeyRoot) {		strcpy(dir, "");		return 0;	}	if (reg_query_string(hKeyRoot, TEXT("/SCRIPTS"), dir))		return 1;	if (reg_query_string(hKeyRoot, TEXT("/"), dir))		return 1;	strcpy(dir, "unknown");	return 1;}static intset_dword_data(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int code, int type, DWORD data){	HRESULT hRes = 0; 	METADATA_RECORD MyData;	MyData.dwMDIdentifier = code;	MyData.dwMDAttributes = METADATA_INHERIT;	MyData.dwMDUserType = type;	MyData.dwMDDataType = DWORD_METADATA;	MyData.dwMDDataLen = sizeof(data);	MyData.pbMDData = (unsigned char *) &data;	hRes = pIMeta->SetData(MyHandle, path, &MyData); 	return ! FAILED(hRes);}static intset_boolean_data(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int code, int type, DWORD data){	HRESULT hRes = 0; 	METADATA_RECORD MyData;	MyData.dwMDIdentifier = code;	MyData.dwMDAttributes = METADATA_INHERIT;	MyData.dwMDUserType = type;	MyData.dwMDDataType = DWORD_METADATA;	MyData.dwMDDataLen = sizeof(data);	MyData.pbMDData = (unsigned char *) &data;	hRes = pIMeta->SetData(MyHandle, path, &MyData); 	return ! FAILED(hRes);}static intset_dword(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int code, DWORD data){	return set_dword_data(pIMeta, MyHandle, path, code, IIS_MD_UT_FILE, data);}static intset_data_len(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int code, int type, 		char *data, int len){	HRESULT hRes = 0; 	METADATA_RECORD MyData;	TCHAR buf[1024];	mbstowcs(buf, data, 256);	memset(&MyData, 0, sizeof(MyData));	MyData.dwMDIdentifier = code;	MyData.dwMDAttributes = METADATA_INHERIT;	MyData.dwMDUserType = type;	MyData.dwMDDataType = STRING_METADATA;	MyData.dwMDDataLen = len * sizeof(WCHAR);	MyData.pbMDData = (unsigned char *) buf;	hRes = pIMeta->SetData(MyHandle, path, &MyData);	return ! FAILED(hRes);}static intset_data(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int code, int type, 		char *data){	return set_data_len(pIMeta, MyHandle, path, code, type, data, strlen(data) + 1);}static intset_string(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, int code, char *data){	return set_data_len(pIMeta, MyHandle, path, code, IIS_MD_UT_FILE, data, strlen(data) + 1);}static intset_type(CComPtr<IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle, TCHAR *path, char *data){	HRESULT hRes = 0; 	METADATA_RECORD MyData;	TCHAR buf[1024];	mbstowcs(buf, data, 256);	memset(&MyData, 0, sizeof(MyData));	MyData.dwMDIdentifier = MD_KEY_TYPE;	MyData.dwMDAttributes = METADATA_NO_ATTRIBUTES;	MyData.dwMDUserType = IIS_MD_UT_SERVER;	MyData.dwMDDataType = STRING_METADATA;	MyData.dwMDDataLen = (wcslen(buf) + 1) * sizeof(WCHAR);	MyData.pbMDData = (unsigned char *) buf;	hRes = pIMeta->SetData(MyHandle, path, &MyData);	return ! FAILED(hRes);}static intadd_resin_script_permission(char *script_dir){	METADATA_HANDLE MyHandle; 	CComPtr <IMSAdminBase> pIMeta;	char data[1024];	*data = 0;	CoInitialize(0);	HRESULT hRes;	hRes = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,							IID_IMSAdminBase, (void **) &pIMeta);		if (FAILED(hRes)) {		return 0;	}	//get a handle to the local machine 	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, TEXT("/LM/W3SVC"),						   METADATA_PERMISSION_READ|METADATA_PERMISSION_WRITE, 20, &MyHandle); 	if (FAILED(hRes)) {		return 0;	}

⌨️ 快捷键说明

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