summaryrefslogtreecommitdiff
path: root/src/core/hle/svc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/svc.cpp')
-rw-r--r--src/core/hle/svc.cpp286
1 files changed, 138 insertions, 148 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 76c6a0771..d964d062e 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -34,9 +34,7 @@ enum MapMemoryPermission {
34}; 34};
35 35
36/// Map application or GSP heap memory 36/// Map application or GSP heap memory
37Result ControlMemory(void* _out_addr, u32 operation, u32 addr0, u32 addr1, u32 size, u32 permissions) { 37Result ControlMemory(u32* out_addr, u32 operation, u32 addr0, u32 addr1, u32 size, u32 permissions) {
38 u32* out_addr = (u32*)_out_addr;
39
40 DEBUG_LOG(SVC,"called operation=0x%08X, addr0=0x%08X, addr1=0x%08X, size=%08X, permissions=0x%08X", 38 DEBUG_LOG(SVC,"called operation=0x%08X, addr0=0x%08X, addr1=0x%08X, size=%08X, permissions=0x%08X",
41 operation, addr0, addr1, size, permissions); 39 operation, addr0, addr1, size, permissions);
42 40
@@ -76,8 +74,7 @@ Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherper
76} 74}
77 75
78/// Connect to an OS service given the port name, returns the handle to the port to out 76/// Connect to an OS service given the port name, returns the handle to the port to out
79Result ConnectToPort(void* _out, const char* port_name) { 77Result ConnectToPort(Handle* out, const char* port_name) {
80 Handle* out = (Handle*)_out;
81 Service::Interface* service = Service::g_manager->FetchFromPortName(port_name); 78 Service::Interface* service = Service::g_manager->FetchFromPortName(port_name);
82 79
83 DEBUG_LOG(SVC, "called port_name=%s", port_name); 80 DEBUG_LOG(SVC, "called port_name=%s", port_name);
@@ -136,11 +133,9 @@ Result WaitSynchronization1(Handle handle, s64 nano_seconds) {
136} 133}
137 134
138/// Wait for the given handles to synchronize, timeout after the specified nanoseconds 135/// Wait for the given handles to synchronize, timeout after the specified nanoseconds
139Result WaitSynchronizationN(void* _out, void* _handles, u32 handle_count, u32 wait_all, 136Result WaitSynchronizationN(s32* out, Handle* handles, s32 handle_count, bool wait_all,
140 s64 nano_seconds) { 137 s64 nano_seconds) {
141 // TODO(bunnei): Do something with nano_seconds, currently ignoring this 138 // TODO(bunnei): Do something with nano_seconds, currently ignoring this
142 s32* out = (s32*)_out;
143 Handle* handles = (Handle*)_handles;
144 bool unlock_all = true; 139 bool unlock_all = true;
145 bool wait_infinite = (nano_seconds == -1); // Used to wait until a thread has terminated 140 bool wait_infinite = (nano_seconds == -1); // Used to wait until a thread has terminated
146 141
@@ -148,7 +143,7 @@ Result WaitSynchronizationN(void* _out, void* _handles, u32 handle_count, u32 wa
148 handle_count, (wait_all ? "true" : "false"), nano_seconds); 143 handle_count, (wait_all ? "true" : "false"), nano_seconds);
149 144
150 // Iterate through each handle, synchronize kernel object 145 // Iterate through each handle, synchronize kernel object
151 for (u32 i = 0; i < handle_count; i++) { 146 for (s32 i = 0; i < handle_count; i++) {
152 bool wait = false; 147 bool wait = false;
153 Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handles[i]); 148 Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handles[i]);
154 149
@@ -200,18 +195,17 @@ void OutputDebugString(const char* string) {
200} 195}
201 196
202/// Get resource limit 197/// Get resource limit
203Result GetResourceLimit(void* _resource_limit, Handle process) { 198Result GetResourceLimit(Handle* resource_limit, Handle process) {
204 // With regards to proceess values: 199 // With regards to proceess values:
205 // 0xFFFF8001 is a handle alias for the current KProcess, and 0xFFFF8000 is a handle alias for 200 // 0xFFFF8001 is a handle alias for the current KProcess, and 0xFFFF8000 is a handle alias for
206 // the current KThread. 201 // the current KThread.
207 Handle* resource_limit = (Handle*)_resource_limit;
208 *resource_limit = 0xDEADBEEF; 202 *resource_limit = 0xDEADBEEF;
209 ERROR_LOG(SVC, "(UNIMPLEMENTED) called process=0x%08X", process); 203 ERROR_LOG(SVC, "(UNIMPLEMENTED) called process=0x%08X", process);
210 return 0; 204 return 0;
211} 205}
212 206
213/// Get resource limit current values 207/// Get resource limit current values
214Result GetResourceLimitCurrentValues(void* _values, Handle resource_limit, void* names, 208Result GetResourceLimitCurrentValues(s64* values, Handle resource_limit, void* names,
215 s32 name_count) { 209 s32 name_count) {
216 ERROR_LOG(SVC, "(UNIMPLEMENTED) called resource_limit=%08X, names=%s, name_count=%d", 210 ERROR_LOG(SVC, "(UNIMPLEMENTED) called resource_limit=%08X, names=%s, name_count=%d",
217 resource_limit, names, name_count); 211 resource_limit, names, name_count);
@@ -255,8 +249,7 @@ u32 ExitThread() {
255} 249}
256 250
257/// Gets the priority for the specified thread 251/// Gets the priority for the specified thread
258Result GetThreadPriority(void* _priority, Handle handle) { 252Result GetThreadPriority(s32* priority, Handle handle) {
259 s32* priority = (s32*)_priority;
260 *priority = Kernel::GetThreadPriority(handle); 253 *priority = Kernel::GetThreadPriority(handle);
261 return 0; 254 return 0;
262} 255}
@@ -267,8 +260,7 @@ Result SetThreadPriority(Handle handle, s32 priority) {
267} 260}
268 261
269/// Create a mutex 262/// Create a mutex
270Result CreateMutex(void* _mutex, u32 initial_locked) { 263Result CreateMutex(Handle* mutex, u32 initial_locked) {
271 Handle* mutex = (Handle*)_mutex;
272 *mutex = Kernel::CreateMutex((initial_locked != 0)); 264 *mutex = Kernel::CreateMutex((initial_locked != 0));
273 DEBUG_LOG(SVC, "called initial_locked=%s : created handle=0x%08X", 265 DEBUG_LOG(SVC, "called initial_locked=%s : created handle=0x%08X",
274 initial_locked ? "true" : "false", *mutex); 266 initial_locked ? "true" : "false", *mutex);
@@ -284,20 +276,19 @@ Result ReleaseMutex(Handle handle) {
284} 276}
285 277
286/// Get current thread ID 278/// Get current thread ID
287Result GetThreadId(void* thread_id, u32 thread) { 279Result GetThreadId(u32* thread_id, Handle thread) {
288 ERROR_LOG(SVC, "(UNIMPLEMENTED) called thread=0x%08X", thread); 280 ERROR_LOG(SVC, "(UNIMPLEMENTED) called thread=0x%08X", thread);
289 return 0; 281 return 0;
290} 282}
291 283
292/// Query memory 284/// Query memory
293Result QueryMemory(void *_info, void *_out, u32 addr) { 285Result QueryMemory(void* info, void* out, u32 addr) {
294 ERROR_LOG(SVC, "(UNIMPLEMENTED) called addr=0x%08X", addr); 286 ERROR_LOG(SVC, "(UNIMPLEMENTED) called addr=0x%08X", addr);
295 return 0; 287 return 0;
296} 288}
297 289
298/// Create an event 290/// Create an event
299Result CreateEvent(void* _event, u32 reset_type) { 291Result CreateEvent(Handle* evt, u32 reset_type) {
300 Handle* evt = (Handle*)_event;
301 *evt = Kernel::CreateEvent((ResetType)reset_type); 292 *evt = Kernel::CreateEvent((ResetType)reset_type);
302 DEBUG_LOG(SVC, "called reset_type=0x%08X : created handle=0x%08X", 293 DEBUG_LOG(SVC, "called reset_type=0x%08X : created handle=0x%08X",
303 reset_type, *evt); 294 reset_type, *evt);
@@ -305,8 +296,7 @@ Result CreateEvent(void* _event, u32 reset_type) {
305} 296}
306 297
307/// Duplicates a kernel handle 298/// Duplicates a kernel handle
308Result DuplicateHandle(void* _out, Handle handle) { 299Result DuplicateHandle(Handle* out, Handle handle) {
309 Handle* out = (Handle*)_out;
310 DEBUG_LOG(SVC, "called handle=0x%08X", handle); 300 DEBUG_LOG(SVC, "called handle=0x%08X", handle);
311 301
312 // Translate kernel handles -> real handles 302 // Translate kernel handles -> real handles
@@ -342,132 +332,132 @@ void SleepThread(s64 nanoseconds) {
342} 332}
343 333
344const HLE::FunctionDef SVC_Table[] = { 334const HLE::FunctionDef SVC_Table[] = {
345 {0x00, nullptr, "Unknown"}, 335 {0x00, nullptr, "Unknown"},
346 {0x01, WrapI_VUUUUU<ControlMemory>, "ControlMemory"}, 336 {0x01, Wrap::S32::U32P_U32_U32_U32_U32_U32<ControlMemory>, "ControlMemory"},
347 {0x02, WrapI_VVU<QueryMemory>, "QueryMemory"}, 337 {0x02, Wrap::S32::VoidP_VoidP_U32<QueryMemory>, "QueryMemory"},
348 {0x03, nullptr, "ExitProcess"}, 338 {0x03, nullptr, "ExitProcess"},
349 {0x04, nullptr, "GetProcessAffinityMask"}, 339 {0x04, nullptr, "GetProcessAffinityMask"},
350 {0x05, nullptr, "SetProcessAffinityMask"}, 340 {0x05, nullptr, "SetProcessAffinityMask"},
351 {0x06, nullptr, "GetProcessIdealProcessor"}, 341 {0x06, nullptr, "GetProcessIdealProcessor"},
352 {0x07, nullptr, "SetProcessIdealProcessor"}, 342 {0x07, nullptr, "SetProcessIdealProcessor"},
353 {0x08, WrapI_UUUUU<CreateThread>, "CreateThread"}, 343 {0x08, Wrap::S32::U32_U32_U32_U32_U32<CreateThread>, "CreateThread"},
354 {0x09, WrapU_V<ExitThread>, "ExitThread"}, 344 {0x09, Wrap::U32::Void<ExitThread>, "ExitThread"},
355 {0x0A, WrapV_S64<SleepThread>, "SleepThread"}, 345 {0x0A, Wrap::Void::S64<SleepThread>, "SleepThread"},
356 {0x0B, WrapI_VU<GetThreadPriority>, "GetThreadPriority"}, 346 {0x0B, Wrap::S32::S32P_U32<GetThreadPriority>, "GetThreadPriority"},
357 {0x0C, WrapI_UI<SetThreadPriority>, "SetThreadPriority"}, 347 {0x0C, Wrap::S32::U32_S32<SetThreadPriority>, "SetThreadPriority"},
358 {0x0D, nullptr, "GetThreadAffinityMask"}, 348 {0x0D, nullptr, "GetThreadAffinityMask"},
359 {0x0E, nullptr, "SetThreadAffinityMask"}, 349 {0x0E, nullptr, "SetThreadAffinityMask"},
360 {0x0F, nullptr, "GetThreadIdealProcessor"}, 350 {0x0F, nullptr, "GetThreadIdealProcessor"},
361 {0x10, nullptr, "SetThreadIdealProcessor"}, 351 {0x10, nullptr, "SetThreadIdealProcessor"},
362 {0x11, nullptr, "GetCurrentProcessorNumber"}, 352 {0x11, nullptr, "GetCurrentProcessorNumber"},
363 {0x12, nullptr, "Run"}, 353 {0x12, nullptr, "Run"},
364 {0x13, WrapI_VU<CreateMutex>, "CreateMutex"}, 354 {0x13, Wrap::S32::U32P_U32<CreateMutex>, "CreateMutex"},
365 {0x14, WrapI_U<ReleaseMutex>, "ReleaseMutex"}, 355 {0x14, Wrap::S32::U32<ReleaseMutex>, "ReleaseMutex"},
366 {0x15, nullptr, "CreateSemaphore"}, 356 {0x15, nullptr, "CreateSemaphore"},
367 {0x16, nullptr, "ReleaseSemaphore"}, 357 {0x16, nullptr, "ReleaseSemaphore"},
368 {0x17, WrapI_VU<CreateEvent>, "CreateEvent"}, 358 {0x17, Wrap::S32::U32P_U32<CreateEvent>, "CreateEvent"},
369 {0x18, WrapI_U<SignalEvent>, "SignalEvent"}, 359 {0x18, Wrap::S32::U32<SignalEvent>, "SignalEvent"},
370 {0x19, WrapI_U<ClearEvent>, "ClearEvent"}, 360 {0x19, Wrap::S32::U32<ClearEvent>, "ClearEvent"},
371 {0x1A, nullptr, "CreateTimer"}, 361 {0x1A, nullptr, "CreateTimer"},
372 {0x1B, nullptr, "SetTimer"}, 362 {0x1B, nullptr, "SetTimer"},
373 {0x1C, nullptr, "CancelTimer"}, 363 {0x1C, nullptr, "CancelTimer"},
374 {0x1D, nullptr, "ClearTimer"}, 364 {0x1D, nullptr, "ClearTimer"},
375 {0x1E, nullptr, "CreateMemoryBlock"}, 365 {0x1E, nullptr, "CreateMemoryBlock"},
376 {0x1F, WrapI_UUUU<MapMemoryBlock>, "MapMemoryBlock"}, 366 {0x1F, Wrap::S32::U32_U32_U32_U32<MapMemoryBlock>, "MapMemoryBlock"},
377 {0x20, nullptr, "UnmapMemoryBlock"}, 367 {0x20, nullptr, "UnmapMemoryBlock"},
378 {0x21, WrapI_V<CreateAddressArbiter>, "CreateAddressArbiter"}, 368 {0x21, Wrap::S32::U32P<CreateAddressArbiter>, "CreateAddressArbiter"},
379 {0x22, WrapI_UUUUS64<ArbitrateAddress>, "ArbitrateAddress"}, 369 {0x22, Wrap::S32::U32_U32_U32_U32_S64<ArbitrateAddress>, "ArbitrateAddress"},
380 {0x23, WrapI_U<CloseHandle>, "CloseHandle"}, 370 {0x23, Wrap::S32::U32<CloseHandle>, "CloseHandle"},
381 {0x24, WrapI_US64<WaitSynchronization1>, "WaitSynchronization1"}, 371 {0x24, Wrap::S32::U32_S64<WaitSynchronization1>, "WaitSynchronization1"},
382 {0x25, WrapI_VVUUS64<WaitSynchronizationN>, "WaitSynchronizationN"}, 372 {0x25, Wrap::S32::S32P_U32P_S32_Bool_S64<WaitSynchronizationN>, "WaitSynchronizationN"},
383 {0x26, nullptr, "SignalAndWait"}, 373 {0x26, nullptr, "SignalAndWait"},
384 {0x27, WrapI_VU<DuplicateHandle>, "DuplicateHandle"}, 374 {0x27, Wrap::S32::U32P_U32<DuplicateHandle>, "DuplicateHandle"},
385 {0x28, nullptr, "GetSystemTick"}, 375 {0x28, nullptr, "GetSystemTick"},
386 {0x29, nullptr, "GetHandleInfo"}, 376 {0x29, nullptr, "GetHandleInfo"},
387 {0x2A, nullptr, "GetSystemInfo"}, 377 {0x2A, nullptr, "GetSystemInfo"},
388 {0x2B, nullptr, "GetProcessInfo"}, 378 {0x2B, nullptr, "GetProcessInfo"},
389 {0x2C, nullptr, "GetThreadInfo"}, 379 {0x2C, nullptr, "GetThreadInfo"},
390 {0x2D, WrapI_VC<ConnectToPort>, "ConnectToPort"}, 380 {0x2D, Wrap::S32::U32P_CharP<ConnectToPort>, "ConnectToPort"},
391 {0x2E, nullptr, "SendSyncRequest1"}, 381 {0x2E, nullptr, "SendSyncRequest1"},
392 {0x2F, nullptr, "SendSyncRequest2"}, 382 {0x2F, nullptr, "SendSyncRequest2"},
393 {0x30, nullptr, "SendSyncRequest3"}, 383 {0x30, nullptr, "SendSyncRequest3"},
394 {0x31, nullptr, "SendSyncRequest4"}, 384 {0x31, nullptr, "SendSyncRequest4"},
395 {0x32, WrapI_U<SendSyncRequest>, "SendSyncRequest"}, 385 {0x32, Wrap::S32::U32<SendSyncRequest>, "SendSyncRequest"},
396 {0x33, nullptr, "OpenProcess"}, 386 {0x33, nullptr, "OpenProcess"},
397 {0x34, nullptr, "OpenThread"}, 387 {0x34, nullptr, "OpenThread"},
398 {0x35, nullptr, "GetProcessId"}, 388 {0x35, nullptr, "GetProcessId"},
399 {0x36, nullptr, "GetProcessIdOfThread"}, 389 {0x36, nullptr, "GetProcessIdOfThread"},
400 {0x37, WrapI_VU<GetThreadId>, "GetThreadId"}, 390 {0x37, Wrap::S32::U32P_U32<GetThreadId>, "GetThreadId"},
401 {0x38, WrapI_VU<GetResourceLimit>, "GetResourceLimit"}, 391 {0x38, Wrap::S32::U32P_U32<GetResourceLimit>, "GetResourceLimit"},
402 {0x39, nullptr, "GetResourceLimitLimitValues"}, 392 {0x39, nullptr, "GetResourceLimitLimitValues"},
403 {0x3A, WrapI_VUVI<GetResourceLimitCurrentValues>, "GetResourceLimitCurrentValues"}, 393 {0x3A, Wrap::S32::S64P_U32_VoidP_S32<GetResourceLimitCurrentValues>, "GetResourceLimitCurrentValues"},
404 {0x3B, nullptr, "GetThreadContext"}, 394 {0x3B, nullptr, "GetThreadContext"},
405 {0x3C, nullptr, "Break"}, 395 {0x3C, nullptr, "Break"},
406 {0x3D, WrapV_C<OutputDebugString>, "OutputDebugString"}, 396 {0x3D, Wrap::Void::CharP<OutputDebugString>, "OutputDebugString"},
407 {0x3E, nullptr, "ControlPerformanceCounter"}, 397 {0x3E, nullptr, "ControlPerformanceCounter"},
408 {0x3F, nullptr, "Unknown"}, 398 {0x3F, nullptr, "Unknown"},
409 {0x40, nullptr, "Unknown"}, 399 {0x40, nullptr, "Unknown"},
410 {0x41, nullptr, "Unknown"}, 400 {0x41, nullptr, "Unknown"},
411 {0x42, nullptr, "Unknown"}, 401 {0x42, nullptr, "Unknown"},
412 {0x43, nullptr, "Unknown"}, 402 {0x43, nullptr, "Unknown"},
413 {0x44, nullptr, "Unknown"}, 403 {0x44, nullptr, "Unknown"},
414 {0x45, nullptr, "Unknown"}, 404 {0x45, nullptr, "Unknown"},
415 {0x46, nullptr, "Unknown"}, 405 {0x46, nullptr, "Unknown"},
416 {0x47, nullptr, "CreatePort"}, 406 {0x47, nullptr, "CreatePort"},
417 {0x48, nullptr, "CreateSessionToPort"}, 407 {0x48, nullptr, "CreateSessionToPort"},
418 {0x49, nullptr, "CreateSession"}, 408 {0x49, nullptr, "CreateSession"},
419 {0x4A, nullptr, "AcceptSession"}, 409 {0x4A, nullptr, "AcceptSession"},
420 {0x4B, nullptr, "ReplyAndReceive1"}, 410 {0x4B, nullptr, "ReplyAndReceive1"},
421 {0x4C, nullptr, "ReplyAndReceive2"}, 411 {0x4C, nullptr, "ReplyAndReceive2"},
422 {0x4D, nullptr, "ReplyAndReceive3"}, 412 {0x4D, nullptr, "ReplyAndReceive3"},
423 {0x4E, nullptr, "ReplyAndReceive4"}, 413 {0x4E, nullptr, "ReplyAndReceive4"},
424 {0x4F, nullptr, "ReplyAndReceive"}, 414 {0x4F, nullptr, "ReplyAndReceive"},
425 {0x50, nullptr, "BindInterrupt"}, 415 {0x50, nullptr, "BindInterrupt"},
426 {0x51, nullptr, "UnbindInterrupt"}, 416 {0x51, nullptr, "UnbindInterrupt"},
427 {0x52, nullptr, "InvalidateProcessDataCache"}, 417 {0x52, nullptr, "InvalidateProcessDataCache"},
428 {0x53, nullptr, "StoreProcessDataCache"}, 418 {0x53, nullptr, "StoreProcessDataCache"},
429 {0x54, nullptr, "FlushProcessDataCache"}, 419 {0x54, nullptr, "FlushProcessDataCache"},
430 {0x55, nullptr, "StartInterProcessDma"}, 420 {0x55, nullptr, "StartInterProcessDma"},
431 {0x56, nullptr, "StopDma"}, 421 {0x56, nullptr, "StopDma"},
432 {0x57, nullptr, "GetDmaState"}, 422 {0x57, nullptr, "GetDmaState"},
433 {0x58, nullptr, "RestartDma"}, 423 {0x58, nullptr, "RestartDma"},
434 {0x59, nullptr, "Unknown"}, 424 {0x59, nullptr, "Unknown"},
435 {0x5A, nullptr, "Unknown"}, 425 {0x5A, nullptr, "Unknown"},
436 {0x5B, nullptr, "Unknown"}, 426 {0x5B, nullptr, "Unknown"},
437 {0x5C, nullptr, "Unknown"}, 427 {0x5C, nullptr, "Unknown"},
438 {0x5D, nullptr, "Unknown"}, 428 {0x5D, nullptr, "Unknown"},
439 {0x5E, nullptr, "Unknown"}, 429 {0x5E, nullptr, "Unknown"},
440 {0x5F, nullptr, "Unknown"}, 430 {0x5F, nullptr, "Unknown"},
441 {0x60, nullptr, "DebugActiveProcess"}, 431 {0x60, nullptr, "DebugActiveProcess"},
442 {0x61, nullptr, "BreakDebugProcess"}, 432 {0x61, nullptr, "BreakDebugProcess"},
443 {0x62, nullptr, "TerminateDebugProcess"}, 433 {0x62, nullptr, "TerminateDebugProcess"},
444 {0x63, nullptr, "GetProcessDebugEvent"}, 434 {0x63, nullptr, "GetProcessDebugEvent"},
445 {0x64, nullptr, "ContinueDebugEvent"}, 435 {0x64, nullptr, "ContinueDebugEvent"},
446 {0x65, nullptr, "GetProcessList"}, 436 {0x65, nullptr, "GetProcessList"},
447 {0x66, nullptr, "GetThreadList"}, 437 {0x66, nullptr, "GetThreadList"},
448 {0x67, nullptr, "GetDebugThreadContext"}, 438 {0x67, nullptr, "GetDebugThreadContext"},
449 {0x68, nullptr, "SetDebugThreadContext"}, 439 {0x68, nullptr, "SetDebugThreadContext"},
450 {0x69, nullptr, "QueryDebugProcessMemory"}, 440 {0x69, nullptr, "QueryDebugProcessMemory"},
451 {0x6A, nullptr, "ReadProcessMemory"}, 441 {0x6A, nullptr, "ReadProcessMemory"},
452 {0x6B, nullptr, "WriteProcessMemory"}, 442 {0x6B, nullptr, "WriteProcessMemory"},
453 {0x6C, nullptr, "SetHardwareBreakPoint"}, 443 {0x6C, nullptr, "SetHardwareBreakPoint"},
454 {0x6D, nullptr, "GetDebugThreadParam"}, 444 {0x6D, nullptr, "GetDebugThreadParam"},
455 {0x6E, nullptr, "Unknown"}, 445 {0x6E, nullptr, "Unknown"},
456 {0x6F, nullptr, "Unknown"}, 446 {0x6F, nullptr, "Unknown"},
457 {0x70, nullptr, "ControlProcessMemory"}, 447 {0x70, nullptr, "ControlProcessMemory"},
458 {0x71, nullptr, "MapProcessMemory"}, 448 {0x71, nullptr, "MapProcessMemory"},
459 {0x72, nullptr, "UnmapProcessMemory"}, 449 {0x72, nullptr, "UnmapProcessMemory"},
460 {0x73, nullptr, "Unknown"}, 450 {0x73, nullptr, "Unknown"},
461 {0x74, nullptr, "Unknown"}, 451 {0x74, nullptr, "Unknown"},
462 {0x75, nullptr, "Unknown"}, 452 {0x75, nullptr, "Unknown"},
463 {0x76, nullptr, "TerminateProcess"}, 453 {0x76, nullptr, "TerminateProcess"},
464 {0x77, nullptr, "Unknown"}, 454 {0x77, nullptr, "Unknown"},
465 {0x78, nullptr, "CreateResourceLimit"}, 455 {0x78, nullptr, "CreateResourceLimit"},
466 {0x79, nullptr, "Unknown"}, 456 {0x79, nullptr, "Unknown"},
467 {0x7A, nullptr, "Unknown"}, 457 {0x7A, nullptr, "Unknown"},
468 {0x7B, nullptr, "Unknown"}, 458 {0x7B, nullptr, "Unknown"},
469 {0x7C, nullptr, "KernelSetState"}, 459 {0x7C, nullptr, "KernelSetState"},
470 {0x7D, nullptr, "QueryProcessMemory"}, 460 {0x7D, nullptr, "QueryProcessMemory"},
471}; 461};
472 462
473void Register() { 463void Register() {