diff --git a/Source/Windows/Common/WinAPI/Sync.cpp b/Source/Windows/Common/WinAPI/Sync.cpp index 88047a4c7..62a684c30 100644 --- a/Source/Windows/Common/WinAPI/Sync.cpp +++ b/Source/Windows/Common/WinAPI/Sync.cpp @@ -133,5 +133,8 @@ DLLEXPORT_FUNC(WINBOOL, SwitchToThread, ()) { } DLLEXPORT_FUNC(void, Sleep, (DWORD dwMilliseconds)) { - UNIMPLEMENTED(); + LARGE_INTEGER Time; + // A negative value indicates a relative time measured in 100ns intervals. + Time.QuadPart = static_cast(dwMilliseconds) * -10000; + NtDelayExecution(false, &Time); } diff --git a/Source/Windows/include/winternl.h b/Source/Windows/include/winternl.h index efd211c5a..686cc0036 100644 --- a/Source/Windows/include/winternl.h +++ b/Source/Windows/include/winternl.h @@ -497,6 +497,7 @@ NTSTATUS WINAPI NtAllocateVirtualMemoryEx(HANDLE, PVOID*, SIZE_T*, ULONG, ULONG, NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE, PVOID*, ULONG_PTR, SIZE_T*, ULONG, ULONG); NTSTATUS WINAPI NtContinue(PCONTEXT, BOOLEAN); NTSTATUS WINAPI NtCreateSection(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, const LARGE_INTEGER*, ULONG, ULONG, HANDLE); +NTSTATUS WINAPI NtDelayExecution(BOOLEAN, const LARGE_INTEGER*); NTSTATUS WINAPI NtDuplicateObject(HANDLE, HANDLE, HANDLE, PHANDLE, ACCESS_MASK, ULONG, ULONG); NTSTATUS WINAPI NtFlushInstructionCache(HANDLE, LPCVOID, SIZE_T); NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE, PVOID*, SIZE_T*, ULONG);