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

📄 iis.cpp

📁 RESIN 3.2 最新源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	sprintf(data, "1,%s\\isapi_srun.dll,1,,Resin", script_dir);	add_multi_string(pIMeta, MyHandle, TEXT("/"), IIS_MD_UT_SERVER, MD_WEB_SVC_EXT_RESTRICTION_LIST, data);	pIMeta->CloseKey(MyHandle);	return 1;}static char *add_resin_script(CComPtr <IMSAdminBase> pIMeta, TCHAR *name, char *script_path){	HRESULT hRes = 0; 	METADATA_HANDLE MyHandle;	TCHAR *scripts = TEXT("/scripts");	char data[256];	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, name,			       METADATA_PERMISSION_READ|METADATA_PERMISSION_WRITE, 20, &MyHandle);	if (FAILED(hRes)) {		return "Can't open script";	}	data[0] = 0;	if (get_string(pIMeta, MyHandle, scripts, IIS_MD_UT_SERVER, MD_KEY_TYPE, data) < 0) {		pIMeta->AddKey(MyHandle, scripts);	}	set_type(pIMeta, MyHandle, scripts, "IIsWebVirtualDir");	set_data(pIMeta, MyHandle, scripts, MD_APP_ROOT, IIS_MD_UT_FILE, "/LM/W3SVC/1/Root/scripts");	set_data(pIMeta, MyHandle, scripts, MD_VR_PATH, IIS_MD_UT_FILE, script_path);	set_data(pIMeta, MyHandle, scripts, MD_APP_FRIENDLY_NAME, IIS_MD_UT_WAM, "scripts");	set_dword(pIMeta, MyHandle, scripts, MD_ACCESS_PERM, MD_ACCESS_EXECUTE);	set_dword_data(pIMeta, MyHandle, scripts, MD_APP_ISOLATED, IIS_MD_UT_WAM, 2);	pIMeta->CloseKey(MyHandle);	return 0;}static char *add_resin_filter(CComPtr <IMSAdminBase> pIMeta, TCHAR *name, char *filter_path){	HRESULT hRes = 0; 	METADATA_HANDLE MyHandle; 	char data[256];	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, name,					       METADATA_PERMISSION_READ|METADATA_PERMISSION_WRITE, 20, &MyHandle);	if (FAILED(hRes)) {		return "Can't open filter";	}	if (get_string(pIMeta, MyHandle, TEXT("/Resin"), IIS_MD_UT_SERVER, MD_KEY_TYPE, data) < 0) {		pIMeta->AddKey(MyHandle, TEXT("/Resin"));	}	set_type(pIMeta, MyHandle, TEXT("/Resin"), "IIsFilter");	set_boolean_data(pIMeta, MyHandle, TEXT("/Resin"), MD_FILTER_ENABLED, IIS_MD_UT_SERVER, 1);	set_data(pIMeta, MyHandle, TEXT("/Resin"), MD_FILTER_IMAGE_PATH, IIS_MD_UT_SERVER, filter_path);	char filterLoad[1024];	char newFilter[1024];	if (get_string(pIMeta, MyHandle, TEXT("/"), IIS_MD_UT_SERVER, MD_FILTER_LOAD_ORDER, filterLoad) < 0)		filterLoad[0] = 0;	if (! strstr(filterLoad, "Resin")) {		if (! filterLoad[0])			strcpy(newFilter, "Resin");		else {			strcpy(newFilter, "Resin,");			strcat(newFilter, filterLoad);		}		if (! set_data(pIMeta, MyHandle, TEXT("/"), MD_FILTER_LOAD_ORDER, IIS_MD_UT_SERVER, newFilter)) {			return "Can't set IIS filter order";		}	}	pIMeta->CloseKey(MyHandle);	return 0;}static char *add_resin_filter_metabase(HWND hDlg, char *filter_path){	HRESULT hRes = 0; 	DWORD indx = 0;	DWORD len = 0;	CComPtr <IMSAdminBase> pIMeta;  	CoInitialize(0);	hRes = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,							IID_IMSAdminBase, (void **) &pIMeta);		if (FAILED(hRes))		return "Can't open metabase";	char *result = add_resin_filter(pIMeta, TEXT("/LM/W3SVC/Filters"), filter_path);	if (! result)		return 0;	// Try again?	result = add_resin_filter(pIMeta, TEXT("/LM/W3SVC/Filters"), filter_path);	return result;}static char *add_resin_script_metabase(HWND hDlg, char *script_path){	HRESULT hRes = 0; 	DWORD indx = 0;	DWORD len = 0;	CComPtr <IMSAdminBase> pIMeta;  	CoInitialize(0);	hRes = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,							IID_IMSAdminBase, (void **) &pIMeta);		if (FAILED(hRes))		return "Can't open metabase";	char *result = add_resin_script(pIMeta, TEXT("/LM/W3SVC/1/ROOT"),					script_path);	return result;}static char *add_resin_filter_registry(HWND hDlg, char *filter_path){	char buf[1024];	HKEY hKeyParams;		buf[0] = 0;	if (! (hKeyParams = reg_lookup(HKEY_LOCAL_MACHINE, IIS_PARAM)))		return "Can't open IIS Parameters";	reg_query_string(hKeyParams, TEXT("Filter DLLs"), buf);	RegCloseKey(hKeyParams);	if (strstr("isapi_srun.dll", buf))		return 0;	if (buf[0])		strcat(buf, ",");	strcat(buf, "isapi_srun.dll");	reg_set_string(IIS_PARAM, "Filter DLLs", buf);	return 0;}static char *remove_resin_filter(CComPtr <IMSAdminBase> pIMeta, METADATA_HANDLE MyHandle){	set_dword(pIMeta, MyHandle, TEXT("/Resin"), MD_FILTER_ENABLED, 0);	pIMeta->DeleteKey(MyHandle, TEXT("/Resin"));	char filterLoad[1024];	if (! get_string(pIMeta, MyHandle, TEXT("/"), IIS_MD_UT_SERVER, MD_FILTER_LOAD_ORDER, filterLoad))		return 0;	char *resin = strstr(filterLoad, "Resin");	if (! resin)		return 0;	char newFilter[1024];	memset(newFilter, 0, sizeof(newFilter));	if (filterLoad != resin) {		int i = -1;		for (; resin - filterLoad + i >= 0 && (resin[i] == ' ' || resin[i] == ','); i--) {		}		strncpy(newFilter, filterLoad, resin - filterLoad + i + 1);		newFilter[resin - filterLoad + i + 1] = 0;		strcat(newFilter, resin + 5);	}	else {		int i;		for (i = 5; resin[i] == ' ' || resin[i] == ','; i++) {		}		strcpy(newFilter, resin + i);	}	if (! set_data(pIMeta, MyHandle, TEXT("/"), MD_FILTER_LOAD_ORDER, IIS_MD_UT_SERVER, newFilter))		return "Can't set IIS filter order";	return 0;}static char *remove_resin_filter_metabase(HWND hDlg){	HRESULT hRes = 0; 	DWORD indx = 0;	DWORD len = 0;	METADATA_HANDLE MyHandle; 	CComPtr <IMSAdminBase> pIMeta;  	CoInitialize(0);	hRes = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,							IID_IMSAdminBase, (void **) &pIMeta);		if (FAILED(hRes))		return "Can't open IIS metabase";	TCHAR *filter;	//get a handle to the local machine 	filter = TEXT("/LM/W3SVC/Filters");	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, filter,					       METADATA_PERMISSION_READ|METADATA_PERMISSION_WRITE, 20, &MyHandle);	int hasFilter = 0;	char *result = 0;	if (! FAILED(hRes)) {		hasFilter = 1;		result = remove_resin_filter(pIMeta, MyHandle);		pIMeta->CloseKey(MyHandle);	}	filter = TEXT("/LM/W3SVC/1/Filters");	hRes = pIMeta->OpenKey(METADATA_MASTER_ROOT_HANDLE, filter,					       METADATA_PERMISSION_READ|METADATA_PERMISSION_WRITE, 20, &MyHandle); 	if (! FAILED(hRes)) {		hasFilter = 1;		result = remove_resin_filter(pIMeta, MyHandle);		pIMeta->CloseKey(MyHandle);	}	return 0;}char *remove_iis(HWND hDlg){	char *msg = remove_resin_filter_metabase(hDlg);	if (msg)		return msg;	int is_nt = (GetVersion() & 0x80000000) == 0; 	if (is_nt) {		if (MessageBox(hDlg, TEXT("Do you want to restart IIS?"), TEXT("Restart IIS?"), MB_OKCANCEL) == IDCANCEL)			return 0;				msg = stop_service(IIS_SERVICE);		if (! msg)			start_service(IIS_SERVICE);	}	else {		MessageBox(hDlg, TEXT("You will need to restart IIS to remove Resin.  You may need to reboot to see the changes."), TEXT("Restart"), MB_OK);	}	return msg;}static char *copy_filter(HWND hDlg, char *resin_home, char *isapi_script, int *iis_restart,			int is_nt){	char src_name[1024];	char dst_name[1024];	FILE *src_file;	FILE *dst_file;	char buf[1024];	int len;	*iis_restart = 0;	sprintf(src_name, "%s/win32/isapi_srun.dll", resin_home);	sprintf(dst_name, "%s\\isapi_srun.dll", isapi_script);	dst_file = fopen(dst_name, "w+b");	if (! dst_file) {		if (! is_nt)			MessageBox(hDlg, TEXT("You must stop PWS for setup to copy the new iis_srun filter.  You may need to press 'Remove', reboot, and then install Resin."), TEXT("Stop PWS"), MB_OK);		else if (MessageBox(hDlg, TEXT("Setup needs to stop IIS to copy the ISAPI filter."), TEXT("Stop IIS?"), MB_OKCANCEL) == IDCANCEL)			return 0;				if (is_nt) {			char *msg = stop_service(IIS_SERVICE);			if (msg)				return msg;			*iis_restart = 1;		}		dst_file = fopen(dst_name, "w+b");		}	if (! dst_file)		return "Can't create isapi_srun.dll in IIS script directory";	src_file = fopen(src_name, "rb");	if (! src_file) {		fclose(dst_file);		return "Can't open isapi_srun.dll in RESIN_HOME";	}	while ((len = fread(buf, 1, sizeof(buf), src_file)) > 0) {		fwrite(buf, 1, len, dst_file);	}	fclose(src_file);	fclose(dst_file);	return 0;}char *configure_iis(HWND hDlg, char *resin_home, char *isapi_script){	char filter[1024];	int is_nt = (GetVersion() & 0x80000000) == 0;         	sprintf(filter, "%s\\isapi_srun.dll", isapi_script);	char *metabase_msg = 0;	add_resin_script_permission(isapi_script);	char *script = add_resin_script_metabase(hDlg, isapi_script);	metabase_msg = add_resin_filter_metabase(hDlg, filter);	if (metabase_msg)		add_resin_filter_registry(hDlg, isapi_script);	int iis_restart = 0;	char *msg = copy_filter(hDlg, resin_home, isapi_script, &iis_restart, is_nt);	if (! is_nt) {	}	else if (iis_restart)		start_service(IIS_SERVICE);	else if (! msg) {		if (MessageBox(hDlg, TEXT("Do you want to restart IIS to use the new filter?"), TEXT("Restart IIS?"), MB_OKCANCEL) == IDCANCEL)			return 0;				char *msg = stop_service(IIS_SERVICE);		if (! msg)			start_service(IIS_SERVICE);	}	if (! msg)		return metabase_msg;	else		return msg;}

⌨️ 快捷键说明

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