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

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

?? ntservice.cpp

?? 一個串口通信的程序
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1997 by Joerg Koenig and the ADG mbH, Mannheim, Germany
// All rights reserved
//
// Distribute freely, except: don't remove my name from the source or
// documentation (don't take credit for my work), mark your changes (don't
// get me blamed for your possible bugs), don't alter or remove this
// notice.
// No warrantee of any kind, express or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
// I'll try to keep a version up to date.  I can be reached as follows:
//    J.Koenig@adg.de                 (company site)
//    Joerg.Koenig@rhein-neckar.de    (private site)
/////////////////////////////////////////////////////////////////////////////
//
// MODIFIED BY TODD C. WILSON FOR THE ROAD RUNNER NT LOGIN SERVICE.
// HOWEVER, THESE MODIFICATIONS ARE BROADER IN SCOPE AND USAGE AND CAN BE USED
// IN OTHER PROJECTS WITH NO CHANGES.
// MODIFIED LINES FLAGGED/BRACKETED BY "//!! TCW MOD"
//
/////////////////////////////////////////////////////////////////////////////


// last revised: $Date: 11.05.98 21:09 $, $Revision: 3 $


/////////////////////////////////////////////////////////////////////////////
// Acknoledgements:
//	o	Thanks to Victor Vogelpoel (VictorV@Telic.nl) for his bug-fixes
//		and enhancements.
//	o	Thanks to Todd C. Wilson (todd@mediatec.com) for the
//		"service" on Win95
//
// Changes:
//	04/30/98
//	o	Added two more switches to handle command line arguments:
//		-e will force a running service to stop (corresponding
//		method in this class: virtual BOOL EndService();) and
//		-s will force the service to start (method:
//		virtual BOOL StartupService())
//
//	02/05/98
//	o	Added the methods "RegisterApplicationLog()" and
//		"DeregisterApplicationLog()" (both virtual). The first one will be
//		called from "InstallService()" and creates some registry-entries
//		for a better event-log. The second one removes these entries when
//		the service will uninstall (see "RemoveService()")
//	o	The service now obtains the security identifier of the current user
//		and uses this SID for event-logging.
//	o	The memory allocated by "CommandLineToArgvW()" will now release
//		(UNICODE version only)
//	o	The service now uses a simple message catalogue for a nicer
//		event logging
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <crtdbg.h>

#include <io.h>			//!! TCW MOD
#include <fcntl.h>		//!! TCW MOD

#include "NTService.h"
#include "NTServiceEventLogMsg.h"


#ifndef RSP_SIMPLE_SERVICE
	#define RSP_SIMPLE_SERVICE 1
#endif
#ifndef RSP_UNREGISTER_SERVICE
	#define RSP_UNREGISTER_SERVICE 0
#endif

BOOL CNTService :: m_bInstance = FALSE;

static CNTService * gpTheService = 0;			// the one and only instance

CNTService * AfxGetService() { return gpTheService; }




static LPCTSTR gszAppRegKey = TEXT("SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\");
static LPCTSTR gszWin95ServKey=TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\RunServices");	//!! TCW MOD


/////////////////////////////////////////////////////////////////////////////
// class CNTService -- construction/destruction

CNTService :: CNTService( LPCTSTR lpServiceName, LPCTSTR lpDisplayName )
	: m_lpServiceName(lpServiceName)
	, m_lpDisplayName(lpDisplayName ? lpDisplayName : lpServiceName)
	, m_dwCheckPoint(0)
	, m_dwErr(0)
	, m_bDebug(FALSE)
	, m_sshStatusHandle(0)
	, m_dwControlsAccepted(SERVICE_ACCEPT_STOP)
	, m_pUserSID(0)
	, m_fConsoleReady(FALSE)
	// parameters to the "CreateService()" function:
	, m_dwDesiredAccess(SERVICE_ALL_ACCESS)
	, m_dwServiceType(SERVICE_WIN32_OWN_PROCESS)
	, m_dwStartType(SERVICE_AUTO_START)
	, m_dwErrorControl(SERVICE_ERROR_NORMAL)
	, m_pszLoadOrderGroup(0)
	, m_dwTagID(0)
	, m_pszDependencies(0)
	, m_pszStartName(0)
	, m_pszPassword(0)
{
	_ASSERTE( ! m_bInstance );

	OSVERSIONINFO vi;
	vi.dwOSVersionInfoSize=sizeof(vi);  // init this.
	GetVersionEx(&vi);      //lint !e534
	m_bWinNT = (vi.dwPlatformId == VER_PLATFORM_WIN32_NT);

	m_bInstance = TRUE;
	gpTheService = this;
	
	// SERVICE_STATUS members that rarely change
	m_ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
	m_ssStatus.dwServiceSpecificExitCode = 0;

	if( m_bWinNT ) {
		/////////////////////////////////////////////////////////////////////////
		// Providing a SID (security identifier) was contributed by Victor
		// Vogelpoel (VictorV@Telic.nl).
		// The code from Victor was slightly modified.

		// Get security information of current user
		BYTE	security_identifier_buffer[ 4096 ];
		DWORD	dwSizeSecurityIdBuffer = sizeof( security_identifier_buffer );
		PSID	user_security_identifier = NULL;

		TCHAR sUserName[ 256 ];
		DWORD dwSizeUserName  =  255;

		TCHAR sDomainName[ 256 ];
		DWORD dwSizeDomainName = 255;

		SID_NAME_USE sidTypeSecurityId;

		::ZeroMemory( sUserName, sizeof( sUserName ) );
		::ZeroMemory( sDomainName, sizeof( sDomainName ) );
		::ZeroMemory( security_identifier_buffer, dwSizeSecurityIdBuffer );

		::GetUserName( sUserName, &dwSizeUserName );

		if( ::LookupAccountName(
					0,
					sUserName,
					&security_identifier_buffer,
					&dwSizeSecurityIdBuffer,
					sDomainName,
					&dwSizeDomainName,
					&sidTypeSecurityId
				)) {
			if( ::IsValidSid( PSID(security_identifier_buffer) ) ) {
				DWORD dwSidLen = ::GetLengthSid(PSID(security_identifier_buffer));
				m_pUserSID = PSID(new BYTE [dwSidLen]);
				::CopySid(dwSidLen, m_pUserSID, security_identifier_buffer);
				_ASSERTE(::EqualSid(m_pUserSID, security_identifier_buffer));
			}
		}
	}
	/////////////////////////////////////////////////////////////////////////
}


CNTService :: ~CNTService() {
	_ASSERTE( m_bInstance );
	delete [] LPBYTE(m_pUserSID);
	m_bInstance = FALSE;
	gpTheService = 0;
}



/////////////////////////////////////////////////////////////////////////////
// class CNTService -- overridables

#define NEXT_ARG ((((*Argv)[2])==TEXT('\0'))?(--Argc,*++Argv):(*Argv)+2)


BOOL CNTService :: RegisterService( int argc, char ** argv ) {
	BOOL (CNTService::* fnc)() = &CNTService::StartDispatcher;
    DWORD Argc;
    LPTSTR * Argv;

#ifdef UNICODE
    Argv = CommandLineToArgvW(GetCommandLineW(), &Argc );
#else
    Argc = (DWORD) argc;
    Argv = argv;
#endif

    while( ++Argv, --Argc ) {
		if( Argv[0][0] == TEXT('-') ) {
			switch( Argv[0][1] ) {
				case TEXT('i'):	// install the service
					fnc = &CNTService::InstallService;
					break;
				case TEXT('l'):	// login-account (only useful with -i)
					m_pszStartName = NEXT_ARG;
					break;
				case TEXT('p'):	// password (only useful with -i)
					m_pszPassword = NEXT_ARG;
					break;
				case TEXT('u'):	// uninstall the service
					fnc = &CNTService::RemoveService;
					break;
				case TEXT('s'):	// start the service
					fnc = &CNTService::StartupService;
					break;
				case TEXT('e'):	// end the service
					fnc = &CNTService::EndService;
					break;
				case TEXT('d'):	// debug the service
				case TEXT('f'):	//!! TCW MOD faceless non-service (Win95) mode
					#ifdef UNICODE
						::GlobalFree(HGLOBAL)Argv);
					#endif

					m_bDebug = TRUE;
					// pass original parameters to DebugService()
					return DebugService(argc, argv,(Argv[0][1]==TEXT('f'))); //!! TCW MOD faceless non-service (Win95) mode
			}
		}
	}

#ifdef UNICODE
	::GlobalFree(HGLOBAL)Argv);
#endif

	//!! TCW MOD START - if Win95, run as faceless app.
	if( fnc == &CNTService::StartDispatcher && OsIsWin95() ) {
		// act as if -f was passed anyways.
		m_bDebug = TRUE;
		return DebugService(argc, argv, TRUE);
	}
	//!! TCW MOD END - if Win95, run as faceless app.

	return (this->*fnc)();
}


BOOL CNTService :: StartDispatcher() {
    // Default implementation creates a single threaded service.
	// Override this method and provide more table entries for
	// a multithreaded service (one entry for each thread).
	SERVICE_TABLE_ENTRY dispatchTable[] =
    {
        { LPTSTR(m_lpServiceName), (LPSERVICE_MAIN_FUNCTION)ServiceMain },
        { 0, 0 }
    };

	BOOL bRet = StartServiceCtrlDispatcher(dispatchTable);
	if( ! bRet ) {
		TCHAR szBuf[256];
        AddToMessageLog(GetLastErrorText(szBuf,255));
	}

	return bRet;
}


BOOL CNTService :: InstallService() {
    TCHAR szPath[1024];

	SetupConsole();	//!! TCW MOD - have to show the console here for the
					// diagnostic or error reason: orignal class assumed
					// that we were using _main for entry (a console app).
					// This particular usage is a Windows app (no console),
					// so we need to create it. Using SetupConsole with _main
					// is ok - does nothing, since you only get one console.

	if( GetModuleFileName( 0, szPath, 1023 ) == 0 ) {
		TCHAR szErr[256];
		_tprintf(TEXT("Unable to install %s - %s\n"), m_lpDisplayName, GetLastErrorText(szErr, 256));
		return FALSE;
	}

	BOOL bRet = FALSE;

	if( OsIsWin95() ) {	//!! TCW MOD - code added to install as Win95 service
		// Create a key for that application and insert values for
		// "EventMessageFile" and "TypesSupported"
		HKEY hKey = 0;
		LONG lRet = ERROR_SUCCESS;
		if( ::RegCreateKey(HKEY_LOCAL_MACHINE, gszWin95ServKey , &hKey) == ERROR_SUCCESS ) {
			lRet =	::RegSetValueEx(
						hKey,				// handle of key to set value for
						m_lpServiceName,	// address of value to set (NAME OF SERVICE)
						0,					// reserved
						REG_EXPAND_SZ,		// flag for value type
						(CONST BYTE*)szPath,// address of value data
						_tcslen(szPath) + 1	// size of value data
					);
			::RegCloseKey(hKey);
			bRet=TRUE;
		}
	} else {
		// Real NT services go here.
		SC_HANDLE schSCManager =	OpenSCManager(
										0,						// machine (NULL == local)
										0,						// database (NULL == default)
										SC_MANAGER_ALL_ACCESS	// access required
									);
		if( schSCManager ) {
			SC_HANDLE schService =	CreateService(
										schSCManager,
										m_lpServiceName,
										m_lpDisplayName,
										m_dwDesiredAccess,
										m_dwServiceType,
										m_dwStartType,
										m_dwErrorControl,
										szPath,
										m_pszLoadOrderGroup,
										((m_dwServiceType == SERVICE_KERNEL_DRIVER ||
										  m_dwServiceType == SERVICE_FILE_SYSTEM_DRIVER) &&
										 (m_dwStartType == SERVICE_BOOT_START ||
										  m_dwStartType == SERVICE_SYSTEM_START)) ?
											&m_dwTagID : 0,
										m_pszDependencies,
										m_pszStartName,
										m_pszPassword
									);

			if( schService ) {
				_tprintf(TEXT("%s installed.\n"), m_lpDisplayName );
				CloseServiceHandle(schService);
				bRet = TRUE;
			} else {
				TCHAR szErr[256];
				_tprintf(TEXT("CreateService failed - %s\n"), GetLastErrorText(szErr, 256));
			}

			CloseServiceHandle(schSCManager);
		 } else {
			TCHAR szErr[256];
			_tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99久久久国产精品免费看 | 国产福利91精品| 欧美喷潮久久久xxxxx| 午夜私人影院久久久久| 欧美精品在线一区二区| 免费成人你懂的| 2021国产精品久久精品| 国产69精品久久久久毛片 | 国产精品成人午夜| 91麻豆swag| 日韩制服丝袜先锋影音| 91精品在线免费观看| 国产制服丝袜一区| 中文一区二区完整视频在线观看| 不卡av电影在线播放| 一二三区精品视频| 精品乱码亚洲一区二区不卡| 福利一区二区在线| 亚洲精品日日夜夜| 欧美一区二区精品在线| 国产福利一区二区| 亚洲一区二区成人在线观看| 9191久久久久久久久久久| 国产一区二区三区最好精华液| 国产精品每日更新在线播放网址 | 国产高清成人在线| 亚洲视频在线观看三级| 911国产精品| 风流少妇一区二区| 一区二区三区四区av| 欧美一级高清片在线观看| 国产69精品久久777的优势| 夜夜亚洲天天久久| 国产午夜亚洲精品不卡| 精品视频1区2区| 福利电影一区二区| 日韩影院精彩在线| 国产精品电影一区二区三区| 91精品国产综合久久福利| 成人av资源下载| 蜜臀av在线播放一区二区三区 | 一区二区三区四区激情| 2023国产一二三区日本精品2022| 成人毛片在线观看| 蜜桃av噜噜一区| 亚洲精品国产第一综合99久久| 精品国产一区二区在线观看| 在线免费观看成人短视频| 国产精品一区二区果冻传媒| 亚洲国产成人91porn| 国产精品二三区| 26uuu亚洲综合色| 欧美一区二区精品在线| 欧美性猛片xxxx免费看久爱| 成人h动漫精品一区二| 奇米影视一区二区三区小说| 亚洲一区二区欧美激情| 中文字幕中文字幕一区二区| xnxx国产精品| 欧美一级高清大全免费观看| 欧美自拍偷拍一区| 91麻豆视频网站| 成人午夜激情在线| 国产福利不卡视频| 国产一区二区三区观看| 欧美aaa在线| 日韩专区一卡二卡| 日韩精品乱码av一区二区| 亚洲综合色网站| 亚洲一区在线视频观看| 亚洲欧美日韩国产手机在线| 中文子幕无线码一区tr| 久久久久久久久岛国免费| 欧美成人一区二区| 欧美tickle裸体挠脚心vk| 日韩一二三区视频| 日韩欧美国产电影| 精品少妇一区二区三区| 精品久久久久久久人人人人传媒| 日韩一级成人av| 精品久久久久久久久久久久久久久久久 | 成人午夜又粗又硬又大| 成人性生交大片| 成人不卡免费av| 91丨porny丨户外露出| 91玉足脚交白嫩脚丫在线播放| 丁香六月综合激情| av午夜精品一区二区三区| 91性感美女视频| 91免费看`日韩一区二区| 色综合视频一区二区三区高清| 97成人超碰视| 欧美影院一区二区三区| 欧美色图一区二区三区| 8v天堂国产在线一区二区| 日韩一区二区在线观看视频播放| 日韩视频在线永久播放| 久久久不卡影院| 亚洲欧美在线视频观看| 亚洲宅男天堂在线观看无病毒| 五月婷婷激情综合| 久久精品999| www.66久久| 欧美日产国产精品| 久久这里只有精品视频网| 中文字幕一区二| 日韩黄色免费网站| 国产美女娇喘av呻吟久久| av电影在线观看一区| 在线播放中文一区| 国产日韩欧美电影| 亚洲国产一区二区三区| 韩国精品在线观看| 色婷婷精品大在线视频 | 国产夜色精品一区二区av| 综合av第一页| 免费美女久久99| 99久久精品国产网站| 日韩视频在线你懂得| 中文字幕一区二区三区在线观看 | 国产一区二区三区观看| 91福利在线看| 久久久久国产成人精品亚洲午夜 | 亚洲国产毛片aaaaa无费看| 青青青伊人色综合久久| 99国产精品国产精品久久| 91精品国产综合久久福利软件| 国产精品福利一区二区| 久久国产欧美日韩精品| 欧美在线高清视频| 久久久三级国产网站| 五月天激情小说综合| 成人美女视频在线观看18| 欧美xxxx老人做受| 亚洲成人自拍网| 9i看片成人免费高清| 久久先锋资源网| 午夜精品一区在线观看| av中文字幕在线不卡| 欧美va天堂va视频va在线| 亚洲bt欧美bt精品| 91蜜桃婷婷狠狠久久综合9色| 精品国产髙清在线看国产毛片| 亚洲最新视频在线观看| 成人激情免费电影网址| 日韩亚洲欧美一区二区三区| 亚洲精品大片www| 成人夜色视频网站在线观看| 欧美大片一区二区| 丝袜脚交一区二区| 在线免费观看日本一区| 自拍av一区二区三区| 丰满少妇在线播放bd日韩电影| 日韩美女天天操| 美国欧美日韩国产在线播放 | 日韩精品一区二区三区中文不卡| 亚洲一区中文日韩| 在线免费观看日本一区| 亚洲欧美日韩国产成人精品影院 | 老鸭窝一区二区久久精品| 777a∨成人精品桃花网| 香蕉影视欧美成人| 欧美电影在线免费观看| 亚洲午夜精品17c| 欧美性猛交xxxx黑人交| 亚洲一区二区在线免费观看视频 | 欧美一区二区在线免费播放 | 经典三级一区二区| 欧美tickling网站挠脚心| 国精产品一区一区三区mba桃花 | 本田岬高潮一区二区三区| 欧美国产综合色视频| 北岛玲一区二区三区四区| 亚洲天堂av一区| 色婷婷激情综合| 偷拍自拍另类欧美| 这里只有精品99re| 精品中文av资源站在线观看| 久久五月婷婷丁香社区| 国产成人午夜片在线观看高清观看| 精品成人一区二区三区| 粉嫩av一区二区三区在线播放 | 日精品一区二区三区| 欧美一区二区三区婷婷月色| 美美哒免费高清在线观看视频一区二区| 制服丝袜av成人在线看| 国产乱码字幕精品高清av | 岛国av在线一区| 国产精品久久久99| 在线日韩一区二区| 日韩av在线播放中文字幕| 精品久久人人做人人爽| 国产91露脸合集magnet| 亚洲综合色视频| 欧美tickling挠脚心丨vk| 99久久精品国产观看| 婷婷久久综合九色国产成人| 精品国产a毛片| 99久精品国产| 日本三级韩国三级欧美三级|