Win32API サービスの表示名に関連付けられているサービス名を取得する GetServiceKeyName

サービスの表示名に関連付けられているサービス名を取得するには、GetServiceKeyName関数を取得する。


「サービスの表示名」とは、以下のサービスのプロパティダイアログの赤枠で囲まれた文字列である。


GetServiceKeyName関数のプロトタイプは、以下のようになっている。

BOOL GetServiceKeyName(
  SC_HANDLE hSCManager,  // SCM データベースのハンドル
  LPCTSTR lpDisplayName, // 表示名
  LPTSTR lpServiceName,  // サービス名
  LPDWORD lpcchBuffer    // サービス名バッファのサイズ
);


  • ここでは。「ASP.NET 状態サービス」というサービスの表示名から実際のサービス名を取得しているプログラムを示す
  • #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
        SC_HANDLE hSCM;
        TCHAR szServiceName[256];
        DWORD dwSize;
        
        hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
        if (hSCM == NULL) {
            return 1;
        }
    
        dwSize = sizeof(szServiceName)/sizeof(szServiceName[0]);
       
        GetServiceKeyName(hSCM, TEXT("ASP.NET 状態サービス"), szServiceName, &dwSize);
    
        _tprintf(TEXT("%s\n"), szServiceName);
    
        CloseServiceHandle(hSCM);
    
        return 0;
    }


  • 実行結果
  • aspnet_state


  • 参考

  • http://msdn.microsoft.com/ja-jp/library/cc429143.aspx