@@ -91,7 +91,12 @@ NTSTATUS KphConnect2(
91
91
_In_ PWSTR FileName
92
92
)
93
93
{
94
- return KphConnect2Ex (DeviceName , FileName , NULL );
94
+ KPH_PARAMETERS parameters ;
95
+
96
+ parameters .SecurityLevel = KphSecuritySignatureCheck ;
97
+ parameters .CreateDynamicConfiguration = TRUE;
98
+
99
+ return KphConnect2Ex (DeviceName , FileName , & parameters );
95
100
}
96
101
97
102
NTSTATUS KphConnect2Ex (
@@ -117,12 +122,12 @@ NTSTATUS KphConnect2Ex(
117
122
118
123
status = KphConnect (fullDeviceName );
119
124
120
- if (status == STATUS_ADDRESS_ALREADY_EXISTS )
125
+ if (NT_SUCCESS ( status ) || status == STATUS_ADDRESS_ALREADY_EXISTS )
121
126
return status ;
122
127
123
128
// Load the driver, and try again.
124
129
125
- KphInstall (DeviceName , FileName );
130
+ KphInstallEx (DeviceName , FileName , Parameters );
126
131
127
132
// Try to open the device again.
128
133
@@ -281,7 +286,7 @@ NTSTATUS KphInstallEx(
281
286
return STATUS_OBJECT_NAME_NOT_FOUND ;
282
287
}
283
288
284
- if (NT_SUCCESS (NtOpenProcessToken (
289
+ if (NT_SUCCESS (status = NtOpenProcessToken (
285
290
NtCurrentProcess (),
286
291
TOKEN_ADJUST_PRIVILEGES ,
287
292
& tokenHandle
@@ -291,6 +296,9 @@ NTSTATUS KphInstallEx(
291
296
NtClose (tokenHandle );
292
297
}
293
298
299
+ if (!NT_SUCCESS (status ))
300
+ goto CleanupExit ;
301
+
294
302
keyName = PhConcatStrings (
295
303
2 ,
296
304
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\" ,
@@ -339,7 +347,7 @@ NTSTATUS KphInstallEx(
339
347
if (!NT_SUCCESS (status = NtSetValueKey (keyHandle , & valueName , 0 , REG_DWORD , & parameters , sizeof (ULONG ))))
340
348
goto CleanupExit ;
341
349
342
- parameters = SERVICE_DEMAND_START ;
350
+ parameters = SERVICE_AUTO_START ;
343
351
RtlInitUnicodeString (& valueName , L"Start" );
344
352
if (!NT_SUCCESS (status = NtSetValueKey (keyHandle , & valueName , 0 , REG_DWORD , & parameters , sizeof (ULONG ))))
345
353
goto CleanupExit ;
0 commit comments