- /* Valid commands are install or remove */\r
- if (str_equiv(argv[1], "install")) {\r
- exit(pre_install_service(argc - 2, argv + 2));\r
- }\r
- if (str_equiv(argv[1], "remove")) {\r
- exit(pre_remove_service(argc - 2, argv + 2));\r
+ /* Lifted from MSDN examples */\r
+ PSID AdministratorsGroup;\r
+ SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;\r
+ if (! AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup)) return;\r
+ CheckTokenMembership(0, AdministratorsGroup, /*XXX*/(PBOOL) &is_admin);\r
+ FreeSid(AdministratorsGroup);\r
+}\r
+\r
+int _tmain(int argc, TCHAR **argv) {\r
+ /* Remember if we are admin */\r
+ check_admin();\r
+\r
+ /* Elevate */\r
+ if (argc > 1) {\r
+ /* Valid commands are install or remove */\r
+ if (str_equiv(argv[1], _T("install"))) {\r
+ if (! is_admin) {\r
+ print_message(stderr, NSSM_MESSAGE_NOT_ADMINISTRATOR_CANNOT_INSTALL);\r
+ exit(100);\r
+ }\r
+ exit(pre_install_service(argc - 2, argv + 2));\r
+ }\r
+ if (str_equiv(argv[1], _T("remove"))) {\r
+ if (! is_admin) {\r
+ print_message(stderr, NSSM_MESSAGE_NOT_ADMINISTRATOR_CANNOT_REMOVE);\r
+ exit(100);\r
+ }\r
+ exit(pre_remove_service(argc - 2, argv + 2));\r
+ }\r