Skip to content

Commit 7293794

Browse files
author
Paul Gofman
committed
vrclient: Convert pid to Unix pid in IVRApplications::RegisterSubprocess().
CW-Bug-Id: #20589
1 parent 65e3321 commit 7293794

3 files changed

Lines changed: 29 additions & 18 deletions

File tree

vrclient_x64/cppIVRApplications_IVRApplications_008.cpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -521,24 +521,6 @@ NTSTATUS wow64_IVRApplications_IVRApplications_008_GetSceneApplicationStateNameF
521521
}
522522
#endif
523523

524-
NTSTATUS IVRApplications_IVRApplications_008_RegisterSubprocess( void *args )
525-
{
526-
struct IVRApplications_IVRApplications_008_RegisterSubprocess_params *params = (struct IVRApplications_IVRApplications_008_RegisterSubprocess_params *)args;
527-
struct u_IVRApplications_IVRApplications_008 *iface = (struct u_IVRApplications_IVRApplications_008 *)params->u_iface;
528-
params->_ret = iface->RegisterSubprocess( params->nPid );
529-
return 0;
530-
}
531-
532-
#if defined(__x86_64__) || defined(__aarch64__)
533-
NTSTATUS wow64_IVRApplications_IVRApplications_008_RegisterSubprocess( void *args )
534-
{
535-
struct wow64_IVRApplications_IVRApplications_008_RegisterSubprocess_params *params = (struct wow64_IVRApplications_IVRApplications_008_RegisterSubprocess_params *)args;
536-
struct u_IVRApplications_IVRApplications_008 *iface = (struct u_IVRApplications_IVRApplications_008 *)params->u_iface;
537-
params->_ret = iface->RegisterSubprocess( params->nPid );
538-
return 0;
539-
}
540-
#endif
541-
542524
NTSTATUS IVRApplications_IVRApplications_008_GetCurrentSceneProcessId( void *args )
543525
{
544526
struct IVRApplications_IVRApplications_008_GetCurrentSceneProcessId_params *params = (struct IVRApplications_IVRApplications_008_GetCurrentSceneProcessId_params *)args;

vrclient_x64/gen_wrapper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@
246246

247247
MANUAL_METHODS = {
248248
"IVRApplications_LaunchInternalProcess": lambda ver, abi: abi == 'u',
249+
"IVRApplications_RegisterSubprocess": lambda ver, abi: abi == 'u',
249250
"IVRClientCore_BIsHmdPresent": lambda ver, abi: abi == 'w',
250251
"IVRClientCore_Init": lambda ver, abi: True,
251252
"IVRClientCore_GetGenericInterface": lambda ver, abi: abi == 'w',

vrclient_x64/unix_vrapplications_manual.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,36 @@ static NTSTATUS IVRApplications_LaunchInternalProcess( Iface *iface, Params *par
134134
return 0;
135135
}
136136

137+
template< typename Iface, typename Params >
138+
static NTSTATUS IVRApplications_RegisterSubprocess( Iface *iface, Params *params, bool wow64 )
139+
{
140+
HANDLE handle;
141+
CLIENT_ID id;
142+
int pid;
143+
144+
params->_ret = 102; /* VRApplicationError_NoApplication */
145+
id.UniqueProcess = ULongToHandle(params->nPid);
146+
id.UniqueThread = 0;
147+
if (NtOpenProcess( &handle, PROCESS_QUERY_INFORMATION, NULL, &id ))
148+
{
149+
ERR( "NtOpenProcess failed for %d.\n", params->nPid );
150+
return 0;
151+
}
152+
if (NtQueryInformationProcess( handle, ProcessWineUnixPid, &pid, sizeof(pid), NULL ))
153+
{
154+
ERR( "NtQueryInformationProcess failed for %d.\n", params->nPid );
155+
NtClose( handle );
156+
return 0;
157+
}
158+
NtClose( handle );
159+
params->_ret = iface->RegisterSubprocess( pid );
160+
TRACE( "pid %04x, _ret %d.\n", params->nPid, params->_ret );
161+
return 0;
162+
}
163+
137164
VRCLIENT_UNIX_IMPL( IVRApplications, 004, LaunchInternalProcess );
138165
VRCLIENT_UNIX_IMPL( IVRApplications, 005, LaunchInternalProcess );
139166
VRCLIENT_UNIX_IMPL( IVRApplications, 006, LaunchInternalProcess );
140167
VRCLIENT_UNIX_IMPL( IVRApplications, 007, LaunchInternalProcess );
141168
VRCLIENT_UNIX_IMPL( IVRApplications, 008, LaunchInternalProcess );
169+
VRCLIENT_UNIX_IMPL( IVRApplications, 008, RegisterSubprocess );

0 commit comments

Comments
 (0)