2828#define SIP (String , Integer ) \
2929 { (String), (PVOID)(Integer) }
3030
31+ #define SREF (String ) (PVOID)&(PH_STRINGREF)PH_STRINGREF_INIT((String))
32+ static PH_STRINGREF PhpServiceUnknownString = PH_STRINGREF_INIT (L"Unknown" );
33+
3134static PH_KEY_VALUE_PAIR PhpServiceStatePairs [] =
3235{
33- SIP (L"Stopped" , SERVICE_STOPPED ),
34- SIP (L"Start pending" , SERVICE_START_PENDING ),
35- SIP (L"Stop pending" , SERVICE_STOP_PENDING ),
36- SIP (L"Running" , SERVICE_RUNNING ),
37- SIP (L"Continue pending" , SERVICE_CONTINUE_PENDING ),
38- SIP (L"Pause pending" , SERVICE_PAUSE_PENDING ),
39- SIP (L"Paused" , SERVICE_PAUSED )
36+ SIP (SREF ( L"Stopped" ) , SERVICE_STOPPED ),
37+ SIP (SREF ( L"Start pending" ) , SERVICE_START_PENDING ),
38+ SIP (SREF ( L"Stop pending" ) , SERVICE_STOP_PENDING ),
39+ SIP (SREF ( L"Running" ) , SERVICE_RUNNING ),
40+ SIP (SREF ( L"Continue pending" ) , SERVICE_CONTINUE_PENDING ),
41+ SIP (SREF ( L"Pause pending" ) , SERVICE_PAUSE_PENDING ),
42+ SIP (SREF ( L"Paused" ) , SERVICE_PAUSED )
4043};
4144
4245static PH_KEY_VALUE_PAIR PhpServiceTypePairs [] =
4346{
44- SIP (L"Driver" , SERVICE_KERNEL_DRIVER ),
45- SIP (L"FS driver" , SERVICE_FILE_SYSTEM_DRIVER ),
46- SIP (L"Own process" , SERVICE_WIN32_OWN_PROCESS ),
47- SIP (L"Share process" , SERVICE_WIN32_SHARE_PROCESS ),
48- SIP (L"Own interactive process" , SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS ),
49- SIP (L"Share interactive process" , SERVICE_WIN32_SHARE_PROCESS | SERVICE_INTERACTIVE_PROCESS ),
50- SIP (L"User own process" , SERVICE_USER_OWN_PROCESS ),
51- SIP (L"User own process (instance)" , SERVICE_USER_OWN_PROCESS | SERVICE_USERSERVICE_INSTANCE ),
52- SIP (L"User share process" , SERVICE_USER_SHARE_PROCESS ),
53- SIP (L"User share process (instance)" , SERVICE_USER_SHARE_PROCESS | SERVICE_USERSERVICE_INSTANCE ),
54- SIP (L"Package own process" , SERVICE_PKG_SERVICE | SERVICE_WIN32_OWN_PROCESS ),
55- SIP (L"Package share process" , SERVICE_PKG_SERVICE | SERVICE_WIN32_SHARE_PROCESS ),
47+ SIP (SREF ( L"Driver" ) , SERVICE_KERNEL_DRIVER ),
48+ SIP (SREF ( L"FS driver" ) , SERVICE_FILE_SYSTEM_DRIVER ),
49+ SIP (SREF ( L"Own process" ) , SERVICE_WIN32_OWN_PROCESS ),
50+ SIP (SREF ( L"Share process" ) , SERVICE_WIN32_SHARE_PROCESS ),
51+ SIP (SREF ( L"Own interactive process" ) , SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS ),
52+ SIP (SREF ( L"Share interactive process" ) , SERVICE_WIN32_SHARE_PROCESS | SERVICE_INTERACTIVE_PROCESS ),
53+ SIP (SREF ( L"User own process" ) , SERVICE_USER_OWN_PROCESS ),
54+ SIP (SREF ( L"User own process (instance)" ) , SERVICE_USER_OWN_PROCESS | SERVICE_USERSERVICE_INSTANCE ),
55+ SIP (SREF ( L"User share process" ) , SERVICE_USER_SHARE_PROCESS ),
56+ SIP (SREF ( L"User share process (instance)" ) , SERVICE_USER_SHARE_PROCESS | SERVICE_USERSERVICE_INSTANCE ),
57+ SIP (SREF ( L"Package own process" ) , SERVICE_PKG_SERVICE | SERVICE_WIN32_OWN_PROCESS ),
58+ SIP (SREF ( L"Package share process" ) , SERVICE_PKG_SERVICE | SERVICE_WIN32_SHARE_PROCESS ),
5659};
5760
5861static PH_KEY_VALUE_PAIR PhpServiceStartTypePairs [] =
5962{
60- SIP (L"Disabled" , SERVICE_DISABLED ),
61- SIP (L"Boot start" , SERVICE_BOOT_START ),
62- SIP (L"System start" , SERVICE_SYSTEM_START ),
63- SIP (L"Auto start" , SERVICE_AUTO_START ),
64- SIP (L"Demand start" , SERVICE_DEMAND_START )
63+ SIP (SREF ( L"Disabled" ) , SERVICE_DISABLED ),
64+ SIP (SREF ( L"Boot start" ) , SERVICE_BOOT_START ),
65+ SIP (SREF ( L"System start" ) , SERVICE_SYSTEM_START ),
66+ SIP (SREF ( L"Auto start" ) , SERVICE_AUTO_START ),
67+ SIP (SREF ( L"Demand start" ) , SERVICE_DEMAND_START )
6568};
6669
6770static PH_KEY_VALUE_PAIR PhpServiceErrorControlPairs [] =
6871{
69- SIP (L"Ignore" , SERVICE_ERROR_IGNORE ),
70- SIP (L"Normal" , SERVICE_ERROR_NORMAL ),
71- SIP (L"Severe" , SERVICE_ERROR_SEVERE ),
72- SIP (L"Critical" , SERVICE_ERROR_CRITICAL )
72+ SIP (SREF ( L"Ignore" ) , SERVICE_ERROR_IGNORE ),
73+ SIP (SREF ( L"Normal" ) , SERVICE_ERROR_NORMAL ),
74+ SIP (SREF ( L"Severe" ) , SERVICE_ERROR_SEVERE ),
75+ SIP (SREF ( L"Critical" ) , SERVICE_ERROR_CRITICAL )
7376};
7477
7578PWSTR PhServiceTypeStrings [] =
@@ -105,6 +108,7 @@ PWSTR PhServiceErrorControlStrings[4] =
105108 L"Critical"
106109};
107110
111+ _Success_ (return != NULL )
108112PVOID PhEnumServices (
109113 _In_ SC_HANDLE ScManagerHandle ,
110114 _In_opt_ ULONG Type ,
@@ -383,38 +387,38 @@ BOOLEAN PhSetServiceDelayedAutoStart(
383387 );
384388}
385389
386- PWSTR PhGetServiceStateString (
390+ PPH_STRINGREF PhGetServiceStateString (
387391 _In_ ULONG ServiceState
388392 )
389393{
390- PWSTR string ;
394+ PPH_STRINGREF string ;
391395
392396 if (PhFindStringSiKeyValuePairs (
393397 PhpServiceStatePairs ,
394398 sizeof (PhpServiceStatePairs ),
395399 ServiceState ,
396- & string
400+ ( PWSTR * ) & string
397401 ))
398402 return string ;
399403 else
400- return L"Unknown" ;
404+ return & PhpServiceUnknownString ;
401405}
402406
403- PWSTR PhGetServiceTypeString (
407+ PPH_STRINGREF PhGetServiceTypeString (
404408 _In_ ULONG ServiceType
405409 )
406410{
407- PWSTR string ;
411+ PPH_STRINGREF string ;
408412
409413 if (PhFindStringSiKeyValuePairs (
410414 PhpServiceTypePairs ,
411415 sizeof (PhpServiceTypePairs ),
412416 ServiceType ,
413- & string
417+ ( PWSTR * ) & string
414418 ))
415419 return string ;
416420 else
417- return L"Unknown" ;
421+ return & PhpServiceUnknownString ;
418422}
419423
420424ULONG PhGetServiceTypeInteger (
@@ -434,21 +438,21 @@ ULONG PhGetServiceTypeInteger(
434438 return ULONG_MAX ;
435439}
436440
437- PWSTR PhGetServiceStartTypeString (
441+ PPH_STRINGREF PhGetServiceStartTypeString (
438442 _In_ ULONG ServiceStartType
439443 )
440444{
441- PWSTR string ;
445+ PPH_STRINGREF string ;
442446
443447 if (PhFindStringSiKeyValuePairs (
444448 PhpServiceStartTypePairs ,
445449 sizeof (PhpServiceStartTypePairs ),
446450 ServiceStartType ,
447- & string
451+ ( PWSTR * ) & string
448452 ))
449453 return string ;
450454 else
451- return L"Unknown" ;
455+ return & PhpServiceUnknownString ;
452456}
453457
454458ULONG PhGetServiceStartTypeInteger (
@@ -468,21 +472,21 @@ ULONG PhGetServiceStartTypeInteger(
468472 return ULONG_MAX ;
469473}
470474
471- PWSTR PhGetServiceErrorControlString (
475+ PPH_STRINGREF PhGetServiceErrorControlString (
472476 _In_ ULONG ServiceErrorControl
473477 )
474478{
475- PWSTR string ;
479+ PPH_STRINGREF string ;
476480
477481 if (PhFindStringSiKeyValuePairs (
478482 PhpServiceErrorControlPairs ,
479483 sizeof (PhpServiceErrorControlPairs ),
480484 ServiceErrorControl ,
481- & string
485+ ( PWSTR * ) & string
482486 ))
483487 return string ;
484488 else
485- return L"Unknown" ;
489+ return & PhpServiceUnknownString ;
486490}
487491
488492ULONG PhGetServiceErrorControlInteger (
0 commit comments