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

📄 getservicename.cpp

📁 用于查看文件被谁加锁了
💻 CPP
字号:
/*=========================================================================== 
    (c) Copyright 1999, Emmanuel KARTMANN, all rights reserved                 
  =========================================================================== 
    File           : GetServiceName.cpp
    $Header: $
    Author         : Emmanuel KARTMANN
    Creation       : Friday 9/24/99 4:52:56 PM
    Remake         : 
  ------------------------------- Description ------------------------------- 

           Implementation of the GetServiceName function

  ------------------------------ Modifications ------------------------------ 
    $Log: $  
  =========================================================================== 
*/

#include <stdlib.h>
#include "stdafx.h"
#include "GetServiceName.h"
#include "WindowsRegistry.h"

// Uses Registry
CString GetServiceName(LPCTSTR lpszExecutablePath)
{
    CString szServiceName;
    CWindowsRegistry MyRegistry;
    CString szKeyName = "\\HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services";
    TCHAR lpszExecutableShortPath[_MAX_PATH+1];

    if (!GetShortPathName(lpszExecutablePath, lpszExecutableShortPath, sizeof(lpszExecutableShortPath))) {
        strcpy(lpszExecutableShortPath, lpszExecutablePath);
    }

    // Open Registry (note: the base key "LOCAL_MACHINE" is part of the KeyName)
    LONG nResult=MyRegistry.OpenKey(szKeyName, NULL, KEY_READ);
    if (nResult == ERROR_SUCCESS) {
        // Loop on all subkeys
        TCHAR lpszSubKey[FWR_MAXIMUM_KEY_SIZE];
        TCHAR lpszImagePathSubKey[FWR_MAXIMUM_KEY_SIZE];
        TCHAR lpszServicePath[_MAX_PATH+1];
        TCHAR lpszServiceShortPath[_MAX_PATH+1];
        BOOL bFound = FALSE;
        for (int i=0; MyRegistry.EnumerateSubKeys(i, lpszSubKey)==TRUE && !bFound; i++) {
            char *lpszImagePath;
            strcpy(lpszImagePathSubKey, lpszSubKey);
            strcat(lpszImagePathSubKey, "\\ImagePath");
            if (MyRegistry.QueryValue(lpszImagePathSubKey,&lpszImagePath) == ERROR_SUCCESS) {

                // (1) Expand environment variable in path
                if (ExpandEnvironmentStrings(lpszImagePath, lpszServicePath, sizeof(lpszServicePath))==0) {
                    strcpy(lpszServicePath, lpszImagePath);
                }

                // (2) Convert to short path
                if (!GetShortPathName(lpszServicePath, lpszServiceShortPath, sizeof(lpszServiceShortPath))) {
                    strcpy(lpszServiceShortPath, lpszServicePath);
                }

                // (3) Compare to executable short path
                if (!stricmp(lpszExecutableShortPath, lpszServiceShortPath)) {

                    // The registry key is the service name (internal name)
                    szServiceName=lpszSubKey; 

                    // Stop the loop
                    bFound = TRUE;
                }

                // For a string value, the pointer has been allocated: do not forget to free it
                if (lpszImagePath) {
                    // <FONT COLOR=red><U>CAUTION:</U></FONT> use <B>delete []</B>, not free or LocalFree
                    delete [] lpszImagePath;
                }
            }
       }
    }

    return(szServiceName);
}

⌨️ 快捷键说明

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