[CRT] Massively improve performance of rand_s
[reactos.git] / base / applications / sc / name.c
1 /*
2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/sc/name.c
5 * PURPOSE:
6 * COPYRIGHT: Copyright 2016 Eric Kohl
7 *
8 */
9
10 #include "sc.h"
11
12 BOOL GetDisplayName(LPCTSTR ServiceName)
13 {
14 SC_HANDLE hManager = NULL;
15 BOOL bResult = TRUE;
16 DWORD BufferSize = 0;
17 LPTSTR pBuffer = NULL;
18
19 hManager = OpenSCManager(NULL,
20 NULL,
21 SC_MANAGER_CONNECT);
22 if (hManager == NULL)
23 {
24 _tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError());
25 bResult = FALSE;
26 goto done;
27 }
28
29 if (!GetServiceDisplayName(hManager,
30 ServiceName,
31 NULL,
32 &BufferSize))
33 {
34 if (BufferSize == 0)
35 {
36 _tprintf(_T("[SC] GetServiceDisplayName FAILED %lu:\n\n"), GetLastError());
37 bResult = FALSE;
38 goto done;
39 }
40 }
41
42 pBuffer = HeapAlloc(GetProcessHeap(), 0, (BufferSize + 1) * sizeof(TCHAR));
43 if (pBuffer == NULL)
44 {
45 SetLastError(ERROR_OUTOFMEMORY);
46 _tprintf(_T("[SC] HeapAlloc FAILED %lu:\n\n"), GetLastError());
47 bResult = FALSE;
48 goto done;
49 }
50
51 BufferSize++;
52 if (!GetServiceDisplayName(hManager,
53 ServiceName,
54 pBuffer,
55 &BufferSize))
56 {
57 _tprintf(_T("[SC] GetServiceDisplayName FAILED %lu:\n\n"), GetLastError());
58 bResult = FALSE;
59 goto done;
60 }
61
62 _tprintf(_T("[SC] GetServiceDisplayName SUCCESS Name = %s\n"), pBuffer);
63
64 done:
65 if (bResult == FALSE)
66 ReportLastError();
67
68 if (pBuffer != NULL)
69 HeapFree(GetProcessHeap(), 0, pBuffer);
70
71 if (hManager)
72 CloseServiceHandle(hManager);
73
74 return bResult;
75 }
76
77 BOOL GetKeyName(LPCTSTR ServiceName)
78 {
79 SC_HANDLE hManager = NULL;
80 BOOL bResult = TRUE;
81 DWORD BufferSize = 0;
82 LPTSTR pBuffer = NULL;
83
84 hManager = OpenSCManager(NULL,
85 NULL,
86 SC_MANAGER_CONNECT);
87 if (hManager == NULL)
88 {
89 _tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError());
90 bResult = FALSE;
91 goto done;
92 }
93
94 if (!GetServiceKeyName(hManager,
95 ServiceName,
96 NULL,
97 &BufferSize))
98 {
99 if (BufferSize == 0)
100 {
101 _tprintf(_T("[SC] GetServiceKeyName FAILED %lu:\n\n"), GetLastError());
102 bResult = FALSE;
103 goto done;
104 }
105 }
106
107 pBuffer = HeapAlloc(GetProcessHeap(), 0, (BufferSize + 1) * sizeof(TCHAR));
108 if (pBuffer == NULL)
109 {
110 SetLastError(ERROR_OUTOFMEMORY);
111 _tprintf(_T("[SC] HeapAlloc FAILED %lu:\n\n"), GetLastError());
112 bResult = FALSE;
113 goto done;
114 }
115
116 BufferSize++;
117 if (!GetServiceKeyName(hManager,
118 ServiceName,
119 pBuffer,
120 &BufferSize))
121 {
122 _tprintf(_T("[SC] GetServiceKeyName FAILED %lu:\n\n"), GetLastError());
123 bResult = FALSE;
124 goto done;
125 }
126
127 _tprintf(_T("[SC] GetServiceKeyName SUCCESS Name = %s\n"), pBuffer);
128
129 done:
130 if (bResult == FALSE)
131 ReportLastError();
132
133 if (pBuffer != NULL)
134 HeapFree(GetProcessHeap(), 0, pBuffer);
135
136 if (hManager)
137 CloseServiceHandle(hManager);
138
139 return bResult;
140 }