@@ -89,7 +89,6 @@ typedef struct _PH_SERVICE_QUERY_S1_DATA
89
89
{
90
90
PH_SERVICE_QUERY_DATA Header ;
91
91
92
- PPH_STRING FileName ;
93
92
HICON SmallIcon ;
94
93
HICON LargeIcon ;
95
94
} PH_SERVICE_QUERY_S1_DATA , * PPH_SERVICE_QUERY_S1_DATA ;
@@ -442,13 +441,44 @@ VOID PhpUpdateServiceItemConfig(
442
441
ULONG returnLength ;
443
442
PSERVICE_TRIGGER_INFO triggerInfo ;
444
443
445
- config = PhGetServiceConfig (serviceHandle );
446
-
447
- if (config )
444
+ if (config = PhGetServiceConfig (serviceHandle ))
448
445
{
446
+ PPH_STRING fileName = NULL ;
447
+
449
448
ServiceItem -> StartType = config -> dwStartType ;
450
449
ServiceItem -> ErrorControl = config -> dwErrorControl ;
451
450
451
+ PhGetServiceDllParameter (config -> dwServiceType , & ServiceItem -> Name -> sr , & fileName );
452
+
453
+ if (!fileName )
454
+ {
455
+ PPH_STRING commandLine ;
456
+
457
+ if (config -> lpBinaryPathName [0 ])
458
+ {
459
+ commandLine = PhCreateString (config -> lpBinaryPathName );
460
+
461
+ if (config -> dwServiceType & SERVICE_WIN32 )
462
+ {
463
+ PH_STRINGREF dummyFileName ;
464
+ PH_STRINGREF dummyArguments ;
465
+
466
+ PhParseCommandLineFuzzy (& commandLine -> sr , & dummyFileName , & dummyArguments , & fileName );
467
+
468
+ if (!fileName )
469
+ PhSwapReference (& fileName , commandLine );
470
+ }
471
+ else
472
+ {
473
+ fileName = PhGetFileName (commandLine );
474
+ }
475
+
476
+ PhDereferenceObject (commandLine );
477
+ }
478
+ }
479
+
480
+ ServiceItem -> FileName = fileName ;
481
+
452
482
PhFree (config );
453
483
}
454
484
@@ -501,25 +531,20 @@ VOID PhpServiceQueryStage1(
501
531
)
502
532
{
503
533
PPH_SERVICE_ITEM serviceItem = Data -> Header .ServiceItem ;
504
- SC_HANDLE serviceManagerHandle = Data -> Header .ServiceManagerHandle ;
505
- SC_HANDLE serviceHandle ;
506
-
507
- if (serviceHandle = OpenService (
508
- serviceManagerHandle ,
509
- serviceItem -> Name -> Buffer ,
510
- SERVICE_QUERY_CONFIG
511
- ))
512
- {
513
- Data -> FileName = PhGetServiceRelevantFileName (& serviceItem -> Name -> sr , serviceHandle );
514
- CloseServiceHandle (serviceHandle );
515
- }
534
+ //SC_HANDLE serviceManagerHandle = Data->Header.ServiceManagerHandle;
516
535
517
- if (Data -> FileName )
536
+ if (serviceItem -> FileName )
518
537
{
519
- if (!PhExtractIcon ( Data -> FileName -> Buffer , & Data -> LargeIcon , & Data -> SmallIcon ) )
538
+ if (!( serviceItem -> Type & SERVICE_DRIVER )) // Skip icons for driver services (dmex )
520
539
{
521
- Data -> LargeIcon = NULL ;
522
- Data -> SmallIcon = NULL ;
540
+ HICON largeIcon ;
541
+ HICON smallIcon ;
542
+
543
+ if (PhExtractIcon (serviceItem -> FileName -> Buffer , & largeIcon , & smallIcon ))
544
+ {
545
+ Data -> LargeIcon = largeIcon ;
546
+ Data -> SmallIcon = smallIcon ;
547
+ }
523
548
}
524
549
525
550
// Version info.
@@ -621,7 +646,6 @@ VOID PhpFillServiceItemStage1(
621
646
{
622
647
PPH_SERVICE_ITEM serviceItem = Data -> Header .ServiceItem ;
623
648
624
- serviceItem -> FileName = Data -> FileName ;
625
649
serviceItem -> SmallIcon = Data -> SmallIcon ;
626
650
serviceItem -> LargeIcon = Data -> LargeIcon ;
627
651
//memcpy(&processItem->VersionInfo, &Data->VersionInfo, sizeof(PH_IMAGE_VERSION_INFO));
0 commit comments