Skip to content

Commit ec216f0

Browse files
committed
Remove duplicate SCM handle
1 parent d2732ba commit ec216f0

File tree

1 file changed

+45
-21
lines changed

1 file changed

+45
-21
lines changed

ProcessHacker/srvprv.c

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ typedef struct _PH_SERVICE_QUERY_S1_DATA
8989
{
9090
PH_SERVICE_QUERY_DATA Header;
9191

92-
PPH_STRING FileName;
9392
HICON SmallIcon;
9493
HICON LargeIcon;
9594
} PH_SERVICE_QUERY_S1_DATA, *PPH_SERVICE_QUERY_S1_DATA;
@@ -442,13 +441,44 @@ VOID PhpUpdateServiceItemConfig(
442441
ULONG returnLength;
443442
PSERVICE_TRIGGER_INFO triggerInfo;
444443

445-
config = PhGetServiceConfig(serviceHandle);
446-
447-
if (config)
444+
if (config = PhGetServiceConfig(serviceHandle))
448445
{
446+
PPH_STRING fileName = NULL;
447+
449448
ServiceItem->StartType = config->dwStartType;
450449
ServiceItem->ErrorControl = config->dwErrorControl;
451450

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+
452482
PhFree(config);
453483
}
454484

@@ -501,25 +531,20 @@ VOID PhpServiceQueryStage1(
501531
)
502532
{
503533
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;
516535

517-
if (Data->FileName)
536+
if (serviceItem->FileName)
518537
{
519-
if (!PhExtractIcon(Data->FileName->Buffer, &Data->LargeIcon, &Data->SmallIcon))
538+
if (!(serviceItem->Type & SERVICE_DRIVER)) // Skip icons for driver services (dmex)
520539
{
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+
}
523548
}
524549

525550
// Version info.
@@ -621,7 +646,6 @@ VOID PhpFillServiceItemStage1(
621646
{
622647
PPH_SERVICE_ITEM serviceItem = Data->Header.ServiceItem;
623648

624-
serviceItem->FileName = Data->FileName;
625649
serviceItem->SmallIcon = Data->SmallIcon;
626650
serviceItem->LargeIcon = Data->LargeIcon;
627651
//memcpy(&processItem->VersionInfo, &Data->VersionInfo, sizeof(PH_IMAGE_VERSION_INFO));

0 commit comments

Comments
 (0)