|
|
1.1 ! root 1: /*++ BUILD Version: 0009 // Increment this if a change has global effects ! 2: ! 3: Copyright (c) 1992 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: winsvc.h ! 8: ! 9: Abstract: ! 10: ! 11: Header file for the Service Control Manager ! 12: ! 13: Author: ! 14: ! 15: Dan Lafferty (danl) 19-Jan-1992 ! 16: ! 17: Environment: ! 18: ! 19: User Mode - Win32 ! 20: ! 21: Revision History: ! 22: ! 23: 19-Jan-1992 danl ! 24: Created ! 25: ! 26: --*/ ! 27: #ifndef _WINSVC_ ! 28: #define _WINSVC_ ! 29: ! 30: // ! 31: // Constants ! 32: // ! 33: ! 34: // ! 35: // Service database names ! 36: // ! 37: ! 38: #define SERVICES_ACTIVE_DATABASEW L"ServicesActive" ! 39: #define SERVICES_FAILED_DATABASEW L"ServicesFailed" ! 40: ! 41: #define SERVICES_ACTIVE_DATABASEA "ServicesActive" ! 42: #define SERVICES_FAILED_DATABASEA "ServicesFailed" ! 43: ! 44: #ifdef UNICODE ! 45: ! 46: #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW ! 47: #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW ! 48: ! 49: #else // ndef UNICODE ! 50: ! 51: #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA ! 52: #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA ! 53: ! 54: #endif // ndef UNICODE ! 55: ! 56: // ! 57: // Value to indicate no change to an optional parameter ! 58: // ! 59: #define SERVICE_NO_CHANGE 0xffffffff ! 60: ! 61: // ! 62: // Service State -- for Enum Requests (Bit Mask) ! 63: // ! 64: #define SERVICE_ACTIVE 0x00000001 ! 65: #define SERVICE_INACTIVE 0x00000002 ! 66: #define SERVICE_STATE_ALL (SERVICE_ACTIVE | \ ! 67: SERVICE_INACTIVE) ! 68: ! 69: // ! 70: // Controls ! 71: // ! 72: #define SERVICE_CONTROL_STOP 0x00000001 ! 73: #define SERVICE_CONTROL_PAUSE 0x00000002 ! 74: #define SERVICE_CONTROL_CONTINUE 0x00000003 ! 75: #define SERVICE_CONTROL_INTERROGATE 0x00000004 ! 76: ! 77: // ! 78: // Service State -- for CurrentState ! 79: // ! 80: #define SERVICE_STOPPED 0x00000001 ! 81: #define SERVICE_START_PENDING 0x00000002 ! 82: #define SERVICE_STOP_PENDING 0x00000003 ! 83: #define SERVICE_RUNNING 0x00000004 ! 84: #define SERVICE_CONTINUE_PENDING 0x00000005 ! 85: #define SERVICE_PAUSE_PENDING 0x00000006 ! 86: #define SERVICE_PAUSED 0x00000007 ! 87: ! 88: // ! 89: // Controls Accepted (Bit Mask) ! 90: // ! 91: #define SERVICE_ACCEPT_STOP 0x00000001 ! 92: #define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002 ! 93: ! 94: // ! 95: // Service Control Manager object specific access types ! 96: // ! 97: #define SC_MANAGER_CONNECT 0x0001 ! 98: #define SC_MANAGER_CREATE_SERVICE 0x0002 ! 99: #define SC_MANAGER_ENUMERATE_SERVICE 0x0004 ! 100: #define SC_MANAGER_LOCK 0x0008 ! 101: #define SC_MANAGER_QUERY_LOCK_STATUS 0x0010 ! 102: #define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020 ! 103: ! 104: #define SC_MANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ ! 105: SC_MANAGER_CONNECT | \ ! 106: SC_MANAGER_CREATE_SERVICE | \ ! 107: SC_MANAGER_ENUMERATE_SERVICE | \ ! 108: SC_MANAGER_LOCK | \ ! 109: SC_MANAGER_QUERY_LOCK_STATUS | \ ! 110: SC_MANAGER_MODIFY_BOOT_CONFIG) ! 111: ! 112: ! 113: ! 114: // ! 115: // Service object specific access type ! 116: // ! 117: #define SERVICE_QUERY_CONFIG 0x0001 ! 118: #define SERVICE_CHANGE_CONFIG 0x0002 ! 119: #define SERVICE_QUERY_STATUS 0x0004 ! 120: #define SERVICE_ENUMERATE_DEPENDENTS 0x0008 ! 121: #define SERVICE_START 0x0010 ! 122: #define SERVICE_STOP 0x0020 ! 123: #define SERVICE_PAUSE_CONTINUE 0x0040 ! 124: #define SERVICE_INTERROGATE 0x0080 ! 125: ! 126: #define SERVICE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ ! 127: SERVICE_QUERY_CONFIG | \ ! 128: SERVICE_CHANGE_CONFIG | \ ! 129: SERVICE_QUERY_STATUS | \ ! 130: SERVICE_ENUMERATE_DEPENDENTS | \ ! 131: SERVICE_START | \ ! 132: SERVICE_STOP | \ ! 133: SERVICE_PAUSE_CONTINUE | \ ! 134: SERVICE_INTERROGATE) ! 135: ! 136: ! 137: // ! 138: // Handle Types ! 139: // ! 140: ! 141: typedef HANDLE SC_HANDLE; ! 142: typedef SC_HANDLE *LPSC_HANDLE; ! 143: ! 144: typedef DWORD SERVICE_STATUS_HANDLE; ! 145: ! 146: // ! 147: // Service Status Structure ! 148: // ! 149: ! 150: typedef struct _SERVICE_STATUS { ! 151: DWORD dwServiceType; ! 152: DWORD dwCurrentState; ! 153: DWORD dwControlsAccepted; ! 154: DWORD dwWin32ExitCode; ! 155: DWORD dwServiceSpecificExitCode; ! 156: DWORD dwCheckPoint; ! 157: DWORD dwWaitHint; ! 158: } SERVICE_STATUS, *LPSERVICE_STATUS; ! 159: ! 160: ! 161: ! 162: // ! 163: // Service Status Enumeration Structure ! 164: // ! 165: ! 166: typedef struct _ENUM_SERVICE_STATUSA { ! 167: LPSTR lpServiceName; ! 168: SERVICE_STATUS ServiceStatus; ! 169: } ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA; ! 170: typedef struct _ENUM_SERVICE_STATUSW { ! 171: LPWSTR lpServiceName; ! 172: SERVICE_STATUS ServiceStatus; ! 173: } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW; ! 174: #ifdef UNICODE ! 175: #define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSW ! 176: #define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSW ! 177: #else ! 178: #define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSA ! 179: #define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSA ! 180: #endif // UNICODE ! 181: ! 182: ! 183: // ! 184: // Structures for the Lock API functions ! 185: // ! 186: ! 187: typedef LPVOID SC_LOCK; ! 188: ! 189: typedef struct _QUERY_SERVICE_LOCK_STATUSA { ! 190: DWORD fIsLocked; ! 191: LPSTR lpLockOwner; ! 192: DWORD dwLockDuration; ! 193: } QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA; ! 194: typedef struct _QUERY_SERVICE_LOCK_STATUSW { ! 195: DWORD fIsLocked; ! 196: LPWSTR lpLockOwner; ! 197: DWORD dwLockDuration; ! 198: } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW; ! 199: #ifdef UNICODE ! 200: #define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSW ! 201: #define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSW ! 202: #else ! 203: #define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSA ! 204: #define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSA ! 205: #endif // UNICODE ! 206: ! 207: ! 208: ! 209: // ! 210: // Query Service Configuration Structure ! 211: // ! 212: ! 213: typedef struct _QUERY_SERVICE_CONFIGA { ! 214: DWORD dwServiceType; ! 215: DWORD dwStartType; ! 216: DWORD dwErrorControl; ! 217: LPSTR lpBinaryPathName; ! 218: LPSTR lpLoadOrderGroup; ! 219: LPSTR lpDependencies; ! 220: LPSTR lpServiceStartName; ! 221: } QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA; ! 222: typedef struct _QUERY_SERVICE_CONFIGW { ! 223: DWORD dwServiceType; ! 224: DWORD dwStartType; ! 225: DWORD dwErrorControl; ! 226: LPWSTR lpBinaryPathName; ! 227: LPWSTR lpLoadOrderGroup; ! 228: LPWSTR lpDependencies; ! 229: LPWSTR lpServiceStartName; ! 230: } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW; ! 231: #ifdef UNICODE ! 232: #define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGW ! 233: #define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGW ! 234: #else ! 235: #define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGA ! 236: #define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGA ! 237: #endif // UNICODE ! 238: ! 239: ! 240: ! 241: // ! 242: // Function Prototype for the Service Main Function ! 243: // ! 244: ! 245: typedef VOID (*LPSERVICE_MAIN_FUNCTIONW)( ! 246: DWORD dwNumServicesArgs, ! 247: LPWSTR *lpServiceArgVectors ! 248: ); ! 249: ! 250: typedef VOID (*LPSERVICE_MAIN_FUNCTIONA)( ! 251: DWORD dwNumServicesArgs, ! 252: LPSTR *lpServiceArgVectors ! 253: ); ! 254: ! 255: #ifdef UNICODE ! 256: #define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONW ! 257: #else ! 258: #define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONA ! 259: #endif //UNICODE ! 260: ! 261: ! 262: // ! 263: // Service Start Table ! 264: // ! 265: ! 266: typedef struct _SERVICE_TABLE_ENTRYA { ! 267: LPSTR lpServiceName; ! 268: LPSERVICE_MAIN_FUNCTIONA lpServiceProc; ! 269: }SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA; ! 270: typedef struct _SERVICE_TABLE_ENTRYW { ! 271: LPWSTR lpServiceName; ! 272: LPSERVICE_MAIN_FUNCTIONW lpServiceProc; ! 273: }SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW; ! 274: #ifdef UNICODE ! 275: #define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYW ! 276: #define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYW ! 277: #else ! 278: #define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYA ! 279: #define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYA ! 280: #endif // UNICODE ! 281: ! 282: // ! 283: // Prototype for the Service Control Handler Function ! 284: // ! 285: ! 286: typedef VOID (*LPHANDLER_FUNCTION)( ! 287: DWORD dwControl ! 288: ); ! 289: ! 290: ! 291: ! 292: /////////////////////////////////////////////////////////////////////////// ! 293: // API Function Prototypes ! 294: /////////////////////////////////////////////////////////////////////////// ! 295: ! 296: BOOL ! 297: WINAPI ! 298: ChangeServiceConfigA( ! 299: SC_HANDLE hService, ! 300: DWORD dwServiceType, ! 301: DWORD dwStartType, ! 302: DWORD dwErrorControl, ! 303: LPCSTR lpBinaryPathName, ! 304: LPCSTR lpLoadOrderGroup, ! 305: LPCSTR lpDependencies, ! 306: LPCSTR lpServiceStartName, ! 307: LPCSTR lpPassword ! 308: ); ! 309: BOOL ! 310: WINAPI ! 311: ChangeServiceConfigW( ! 312: SC_HANDLE hService, ! 313: DWORD dwServiceType, ! 314: DWORD dwStartType, ! 315: DWORD dwErrorControl, ! 316: LPCWSTR lpBinaryPathName, ! 317: LPCWSTR lpLoadOrderGroup, ! 318: LPCWSTR lpDependencies, ! 319: LPCWSTR lpServiceStartName, ! 320: LPCWSTR lpPassword ! 321: ); ! 322: #ifdef UNICODE ! 323: #define ChangeServiceConfig ChangeServiceConfigW ! 324: #else ! 325: #define ChangeServiceConfig ChangeServiceConfigA ! 326: #endif // !UNICODE ! 327: ! 328: BOOL ! 329: WINAPI ! 330: CloseServiceHandle( ! 331: SC_HANDLE hSCObject ! 332: ); ! 333: ! 334: BOOL ! 335: WINAPI ! 336: ControlService( ! 337: SC_HANDLE hService, ! 338: DWORD dwControl, ! 339: LPSERVICE_STATUS lpServiceStatus ! 340: ); ! 341: ! 342: SC_HANDLE ! 343: WINAPI ! 344: CreateServiceA( ! 345: SC_HANDLE hSCManager, ! 346: LPCSTR lpServiceName, ! 347: DWORD dwDesiredAccess, ! 348: DWORD dwServiceType, ! 349: DWORD dwStartType, ! 350: DWORD dwErrorControl, ! 351: LPCSTR lpBinaryPathName, ! 352: LPCSTR lpLoadOrderGroup, ! 353: LPCSTR lpDependencies, ! 354: LPCSTR lpServiceStartName, ! 355: LPCSTR lpPassword ! 356: ); ! 357: SC_HANDLE ! 358: WINAPI ! 359: CreateServiceW( ! 360: SC_HANDLE hSCManager, ! 361: LPCWSTR lpServiceName, ! 362: DWORD dwDesiredAccess, ! 363: DWORD dwServiceType, ! 364: DWORD dwStartType, ! 365: DWORD dwErrorControl, ! 366: LPCWSTR lpBinaryPathName, ! 367: LPCWSTR lpLoadOrderGroup, ! 368: LPCWSTR lpDependencies, ! 369: LPCWSTR lpServiceStartName, ! 370: LPCWSTR lpPassword ! 371: ); ! 372: #ifdef UNICODE ! 373: #define CreateService CreateServiceW ! 374: #else ! 375: #define CreateService CreateServiceA ! 376: #endif // !UNICODE ! 377: ! 378: BOOL ! 379: WINAPI ! 380: DeleteService( ! 381: SC_HANDLE hService ! 382: ); ! 383: ! 384: BOOL ! 385: WINAPI ! 386: EnumDependentServicesA( ! 387: SC_HANDLE hService, ! 388: DWORD dwServiceState, ! 389: LPENUM_SERVICE_STATUSA lpServices, ! 390: DWORD cbBufSize, ! 391: LPDWORD pcbBytesNeeded, ! 392: LPDWORD lpServicesReturned ! 393: ); ! 394: BOOL ! 395: WINAPI ! 396: EnumDependentServicesW( ! 397: SC_HANDLE hService, ! 398: DWORD dwServiceState, ! 399: LPENUM_SERVICE_STATUSW lpServices, ! 400: DWORD cbBufSize, ! 401: LPDWORD pcbBytesNeeded, ! 402: LPDWORD lpServicesReturned ! 403: ); ! 404: #ifdef UNICODE ! 405: #define EnumDependentServices EnumDependentServicesW ! 406: #else ! 407: #define EnumDependentServices EnumDependentServicesA ! 408: #endif // !UNICODE ! 409: ! 410: BOOL ! 411: WINAPI ! 412: EnumServicesStatusA( ! 413: SC_HANDLE hSCManager, ! 414: DWORD dwServiceType, ! 415: DWORD dwServiceState, ! 416: LPENUM_SERVICE_STATUSA lpServices, ! 417: DWORD cbBufSize, ! 418: LPDWORD pcbBytesNeeded, ! 419: LPDWORD lpServicesReturned, ! 420: LPDWORD lpResumeHandle ! 421: ); ! 422: BOOL ! 423: WINAPI ! 424: EnumServicesStatusW( ! 425: SC_HANDLE hSCManager, ! 426: DWORD dwServiceType, ! 427: DWORD dwServiceState, ! 428: LPENUM_SERVICE_STATUSW lpServices, ! 429: DWORD cbBufSize, ! 430: LPDWORD pcbBytesNeeded, ! 431: LPDWORD lpServicesReturned, ! 432: LPDWORD lpResumeHandle ! 433: ); ! 434: #ifdef UNICODE ! 435: #define EnumServicesStatus EnumServicesStatusW ! 436: #else ! 437: #define EnumServicesStatus EnumServicesStatusA ! 438: #endif // !UNICODE ! 439: ! 440: SC_LOCK ! 441: WINAPI ! 442: LockServiceDatabase( ! 443: SC_HANDLE hSCManager ! 444: ); ! 445: ! 446: BOOL ! 447: WINAPI ! 448: NotifyBootConfigStatus( ! 449: BOOL BootAcceptable ! 450: ); ! 451: ! 452: SC_HANDLE ! 453: WINAPI ! 454: OpenSCManagerA( ! 455: LPCSTR lpMachineName, ! 456: LPCSTR lpDatabaseName, ! 457: DWORD dwDesiredAccess ! 458: ); ! 459: SC_HANDLE ! 460: WINAPI ! 461: OpenSCManagerW( ! 462: LPCWSTR lpMachineName, ! 463: LPCWSTR lpDatabaseName, ! 464: DWORD dwDesiredAccess ! 465: ); ! 466: #ifdef UNICODE ! 467: #define OpenSCManager OpenSCManagerW ! 468: #else ! 469: #define OpenSCManager OpenSCManagerA ! 470: #endif // !UNICODE ! 471: ! 472: SC_HANDLE ! 473: WINAPI ! 474: OpenServiceA( ! 475: SC_HANDLE hSCManager, ! 476: LPCSTR lpServiceName, ! 477: DWORD dwDesiredAccess ! 478: ); ! 479: SC_HANDLE ! 480: WINAPI ! 481: OpenServiceW( ! 482: SC_HANDLE hSCManager, ! 483: LPCWSTR lpServiceName, ! 484: DWORD dwDesiredAccess ! 485: ); ! 486: #ifdef UNICODE ! 487: #define OpenService OpenServiceW ! 488: #else ! 489: #define OpenService OpenServiceA ! 490: #endif // !UNICODE ! 491: ! 492: BOOL ! 493: WINAPI ! 494: QueryServiceConfigA( ! 495: SC_HANDLE hService, ! 496: LPQUERY_SERVICE_CONFIGA lpServiceConfig, ! 497: DWORD cbBufSize, ! 498: LPDWORD pcbBytesNeeded ! 499: ); ! 500: BOOL ! 501: WINAPI ! 502: QueryServiceConfigW( ! 503: SC_HANDLE hService, ! 504: LPQUERY_SERVICE_CONFIGW lpServiceConfig, ! 505: DWORD cbBufSize, ! 506: LPDWORD pcbBytesNeeded ! 507: ); ! 508: #ifdef UNICODE ! 509: #define QueryServiceConfig QueryServiceConfigW ! 510: #else ! 511: #define QueryServiceConfig QueryServiceConfigA ! 512: #endif // !UNICODE ! 513: ! 514: BOOL ! 515: WINAPI ! 516: QueryServiceLockStatusA( ! 517: SC_HANDLE hSCManager, ! 518: LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus, ! 519: DWORD cbBufSize, ! 520: LPDWORD pcbBytesNeeded ! 521: ); ! 522: BOOL ! 523: WINAPI ! 524: QueryServiceLockStatusW( ! 525: SC_HANDLE hSCManager, ! 526: LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus, ! 527: DWORD cbBufSize, ! 528: LPDWORD pcbBytesNeeded ! 529: ); ! 530: #ifdef UNICODE ! 531: #define QueryServiceLockStatus QueryServiceLockStatusW ! 532: #else ! 533: #define QueryServiceLockStatus QueryServiceLockStatusA ! 534: #endif // !UNICODE ! 535: ! 536: BOOL ! 537: WINAPI ! 538: QueryServiceObjectSecurity( ! 539: SC_HANDLE hService, ! 540: SECURITY_INFORMATION dwSecurityInformation, ! 541: PSECURITY_DESCRIPTOR lpSecurityDescriptor, ! 542: DWORD cbBufSize, ! 543: LPDWORD pcbBytesNeeded ! 544: ); ! 545: ! 546: BOOL ! 547: WINAPI ! 548: QueryServiceStatus( ! 549: SC_HANDLE hService, ! 550: LPSERVICE_STATUS lpServiceStatus ! 551: ); ! 552: ! 553: SERVICE_STATUS_HANDLE ! 554: WINAPI ! 555: RegisterServiceCtrlHandlerA( ! 556: LPCSTR lpServiceName, ! 557: LPHANDLER_FUNCTION lpHandlerProc ! 558: ); ! 559: SERVICE_STATUS_HANDLE ! 560: WINAPI ! 561: RegisterServiceCtrlHandlerW( ! 562: LPCWSTR lpServiceName, ! 563: LPHANDLER_FUNCTION lpHandlerProc ! 564: ); ! 565: #ifdef UNICODE ! 566: #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW ! 567: #else ! 568: #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA ! 569: #endif // !UNICODE ! 570: ! 571: BOOL ! 572: WINAPI ! 573: SetServiceObjectSecurity( ! 574: SC_HANDLE hService, ! 575: SECURITY_INFORMATION dwSecurityInformation, ! 576: PSECURITY_DESCRIPTOR lpSecurityDescriptor ! 577: ); ! 578: ! 579: BOOL ! 580: WINAPI ! 581: SetServiceStatus( ! 582: SERVICE_STATUS_HANDLE hServiceStatus, ! 583: LPSERVICE_STATUS lpServiceStatus ! 584: ); ! 585: ! 586: BOOL ! 587: WINAPI ! 588: StartServiceCtrlDispatcherA( ! 589: LPSERVICE_TABLE_ENTRYA lpServiceStartTable ! 590: ); ! 591: BOOL ! 592: WINAPI ! 593: StartServiceCtrlDispatcherW( ! 594: LPSERVICE_TABLE_ENTRYW lpServiceStartTable ! 595: ); ! 596: #ifdef UNICODE ! 597: #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW ! 598: #else ! 599: #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA ! 600: #endif // !UNICODE ! 601: ! 602: ! 603: BOOL ! 604: WINAPI ! 605: StartServiceA( ! 606: SC_HANDLE hService, ! 607: DWORD dwNumServiceArgs, ! 608: LPCSTR *lpServiceArgVectors ! 609: ); ! 610: BOOL ! 611: WINAPI ! 612: StartServiceW( ! 613: SC_HANDLE hService, ! 614: DWORD dwNumServiceArgs, ! 615: LPCWSTR *lpServiceArgVectors ! 616: ); ! 617: #ifdef UNICODE ! 618: #define StartService StartServiceW ! 619: #else ! 620: #define StartService StartServiceA ! 621: #endif // !UNICODE ! 622: ! 623: BOOL ! 624: WINAPI ! 625: UnlockServiceDatabase( ! 626: SC_LOCK ScLock ! 627: ); ! 628: ! 629: ! 630: ! 631: ! 632: #endif // _WINSVC_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.