亚洲欧美第一页_禁久久精品乱码_粉嫩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精品免费观看不卡| 日韩精品一区第一页| 久久综合九色综合欧美就去吻 | 亚洲成人1区2区| 欧美又粗又大又爽| 日韩av在线发布| 久久嫩草精品久久久久| 91黄色免费看| 国产精品资源在线看| 亚洲h动漫在线| 国产精品视频yy9299一区| 欧美日韩情趣电影| 岛国一区二区在线观看| 日韩在线一二三区| 中文字幕一区二区三区四区| 在线成人小视频| 91丨porny丨首页| 精品午夜一区二区三区在线观看| 亚洲精品国产成人久久av盗摄| 欧美日本一道本在线视频| 激情成人午夜视频| 亚洲自拍偷拍网站| 亚洲国产成人午夜在线一区| 欧美成人性战久久| 7777女厕盗摄久久久| 91在线观看地址| 国产精品亚洲视频| 蜜臀精品久久久久久蜜臀| 亚洲免费av在线| 中文字幕久久午夜不卡| 精品久久国产字幕高潮| 欧美久久久久久久久| 99re6这里只有精品视频在线观看| 麻豆久久一区二区| 午夜av一区二区| 一片黄亚洲嫩模| 亚洲欧洲av色图| 亚洲国产成人在线| 6080yy午夜一二三区久久| 91日韩精品一区| 国产毛片精品国产一区二区三区| 蜜臀av一区二区在线观看| 亚洲高清免费在线| 亚洲国产综合91精品麻豆| 亚洲视频一区二区在线| 国产精品区一区二区三区| 国产日韩精品一区二区三区在线| 欧美成人a∨高清免费观看| 3751色影院一区二区三区| 欧美亚州韩日在线看免费版国语版| 成人avav在线| av不卡在线观看| 国产呦萝稀缺另类资源| 蜜臀a∨国产成人精品| 日日欢夜夜爽一区| 日本欧美一区二区在线观看| 日韩福利视频网| 另类小说色综合网站| 久久99国产精品麻豆| 裸体歌舞表演一区二区| 久久成人av少妇免费| 国产美女在线观看一区| 高清在线成人网| 成人激情动漫在线观看| 91亚洲精品久久久蜜桃| 日本韩国一区二区| 欧美乱妇23p| 日韩写真欧美这视频| 制服丝袜成人动漫| 欧美电影免费观看完整版| 欧美第一区第二区| 国产欧美久久久精品影院| 自拍偷自拍亚洲精品播放| 亚洲一区二区三区四区在线| 日韩高清欧美激情| 激情五月激情综合网| 国产成人亚洲综合a∨婷婷图片| 国产白丝精品91爽爽久久| 99精品久久只有精品| 欧美日本视频在线| 久久久噜噜噜久久中文字幕色伊伊| 3d成人h动漫网站入口| 国产日韩欧美一区二区三区综合| 欧美精品久久99| 欧美大白屁股肥臀xxxxxx| 久久午夜色播影院免费高清| 国产精品久久综合| 亚洲成年人网站在线观看| 国产在线日韩欧美| 成人深夜在线观看| 色综合天天综合网国产成人综合天| 欧美日韩精品欧美日韩精品一| 精品日韩欧美一区二区| 久久9热精品视频| 处破女av一区二区| 3751色影院一区二区三区| 欧美高清在线精品一区| 亚洲免费在线视频| 久久国产精品免费| 欧美中文字幕久久 | 4438成人网| 国产精品天天看| 日韩av成人高清| 99国产欧美另类久久久精品| 欧美一级免费观看| 亚洲色图欧洲色图| 国产真实乱子伦精品视频| 在线看国产一区| 久久精品日韩一区二区三区| 亚洲国产一区视频| 国产乱一区二区| 欧美一级理论片| 日韩一区日韩二区| 精品一区二区免费看| 欧洲av在线精品| 国产精品免费看片| 美女脱光内衣内裤视频久久网站| 97久久精品人人爽人人爽蜜臀 | 欧美一卡二卡三卡四卡| 亚洲视频一区二区在线| 国产成人av福利| 日韩视频免费观看高清完整版| 亚洲欧美激情插| 国产精品主播直播| 欧美精品电影在线播放| 亚洲免费观看视频| 国产成人一区在线| 欧美亚洲另类激情小说| 中文字幕 久热精品 视频在线 | 九一久久久久久| 欧美日本在线观看| 亚洲综合免费观看高清完整版在线| 丁香亚洲综合激情啪啪综合| 精品国产欧美一区二区| 日本欧洲一区二区| 欧美日韩国产高清一区| 一区二区三区在线观看欧美| 91浏览器在线视频| 国产精品国产馆在线真实露脸| 国产电影精品久久禁18| 久久午夜老司机| 国产精品一二三| 久久久99精品免费观看不卡| 奇米在线7777在线精品| 久久亚洲私人国产精品va媚药| 免费人成网站在线观看欧美高清| 91精品国产欧美一区二区18| 91麻豆国产自产在线观看| 国产精品天美传媒| 一本一道波多野结衣一区二区| 亚洲三级在线观看| 欧美日韩国产123区| 毛片基地黄久久久久久天堂| 欧美成人伊人久久综合网| 国产不卡视频在线播放| 国产欧美日韩另类视频免费观看| 粉嫩av一区二区三区在线播放| 亚洲欧美综合在线精品| 在线亚洲人成电影网站色www| 亚洲尤物在线视频观看| 精品捆绑美女sm三区| 激情综合一区二区三区| 国产精品视频看| 日本韩国欧美国产| 视频一区二区中文字幕| 久久久www免费人成精品| 成人a区在线观看| 亚洲国产aⅴ成人精品无吗| 91精品国产色综合久久ai换脸| 黄网站免费久久| 亚洲桃色在线一区| 欧美日韩一级片在线观看| 国产传媒久久文化传媒| 亚洲视频资源在线| 欧美成人video| 不卡的看片网站| 日韩黄色一级片| 26uuu久久综合| 波多野结衣91| 美美哒免费高清在线观看视频一区二区| 精品伦理精品一区| 91国产免费观看| 看电影不卡的网站| 国产精品久久久久三级| 日韩一级免费观看| 99久久99久久精品国产片果冻| 青青草一区二区三区| 国产精品伦理一区二区| 欧美高清一级片在线| 高清国产一区二区| 亚洲图片欧美综合| 日本一区二区三区在线不卡| 色妹子一区二区| 国产成人精品免费| 日韩一区精品字幕| 中文字幕第一区综合| 56国语精品自产拍在线观看| 波多野结衣在线aⅴ中文字幕不卡| 美女视频一区二区三区|