Use close_handle().
[nssm.git] / account.cpp
index d16d51d..cb7fcdb 100644 (file)
@@ -234,19 +234,26 @@ int is_localsystem(const TCHAR *username) {
   return ret;\r
 }\r
 \r
+/* Build the virtual account name. */\r
+TCHAR *virtual_account(const TCHAR *service_name) {\r
+  size_t len = _tcslen(NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN) + _tcslen(service_name) + 2;\r
+  TCHAR *name = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, len * sizeof(TCHAR));\r
+  if (! name) {\r
+    print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("name"), _T("virtual_account"));\r
+    return 0;\r
+  }\r
+\r
+  _sntprintf_s(name, len, _TRUNCATE, _T("%s\\%s"), NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN, service_name);\r
+  return name;\r
+}\r
+\r
 /* Does the username represent a virtual account for the service? */\r
 int is_virtual_account(const TCHAR *service_name, const TCHAR *username) {\r
   if (! imports.IsWellKnownSid) return 0;\r
   if (! service_name) return 0;\r
   if (! username) return 0;\r
 \r
-  size_t len = _tcslen(NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN) + _tcslen(service_name) + 2;\r
-  TCHAR *canon = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, len * sizeof(TCHAR));\r
-  if (! canon) {\r
-    print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("canon"), _T("is_virtual_account"));\r
-    return 0;\r
-  }\r
-  _sntprintf_s(canon, len, _TRUNCATE, _T("%s\\%s"), NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN, service_name);\r
+  TCHAR *canon = virtual_account(service_name);\r
   int ret = str_equiv(canon, username);\r
   HeapFree(GetProcessHeap(), 0, canon);\r
   return ret;\r