Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Windows 8 ARM, A.K.A. "Windows RT" have the Winapi (win32) available for third party developers?

Windows 8 for ARM, also known as Windows RT, does it have the equivalent of the Win32 API?

(I don't mean if it can run Win32 x86 code, but if it has the Win32 API available to third party developers.)

like image 640
Prof. Falken Avatar asked Nov 24 '11 09:11

Prof. Falken


2 Answers

As Igor Skochinsky pointed out, Windows RT has (almost) the same Win32 APIs as Windows for x86. If you write a "Metro" app using C++ and WinRT, you should be able to call these functions as you like. However, you can't get such an app into the Windows Store, as it will very likely fail the automated tests. You can only run it under a "developer license", which is a special development mode that allows you to sideload apps onto your device. (Disclaimer: This is based upon my experiments with Windows 8 for x86, and documentation I've read. I haven't tried this on an actual Surface RT. There might be additional blocks in place that prevent your app from running.)

Also, you can't run your own Desktop apps on Windows RT, as Windows checks the signature of the executable and only runs it if it is signed by Microsoft. (There will probably be way around this, either by Jailbraking, or by self-signing your executables. I've opened a question on that topic, btw.)

like image 35
jdm Avatar answered Oct 23 '22 06:10

jdm


Yes, the ARM version will support the same APIs as x86 and x64 builds, possibly with some slight differences in architecture-specific stuff like exception handling.

For example, here's the list of APIs that the ARM version of msvcrt110.dll imports from kernel32:

Setting environment for using Microsoft Visual Studio 2010 x86 tools.
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file arm_msvcr110d_win8.pe

File Type: DLL

  Section contains the following imports:

    KERNEL32.dll
              100E4000 Import Address Table
              1012DA80 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  108 DecodePointer
                  12E EncodePointer
                  498 RtlPcToFileHeader
                  425 RaiseException
                  269 GetModuleFileNameA
                  26A GetModuleFileNameW
                  1AA FreeEnvironmentStringsW
                  26D GetModuleHandleExW
                  2A1 GetProcAddress
                  160 ExitProcess
                  3C7 MultiByteToWideChar
                  258 GetLastError
                  26E GetModuleHandleW
                  2C4 GetStdHandle
                  5C1 WriteFile
                  1D3 GetCommandLineA
                  1D4 GetCommandLineW
                  19D FlsGetValue
                  19E FlsSetValue
                  21A GetCurrentThreadId
                  [...]
                  4B1 SetConsoleCtrlHandler
                  361 IsDebuggerPresent
                  2F7 GetTickCount64
                  3F0 OutputDebugStringA
                  38C LCMapStringA
                  232 GetEnvironmentVariableA
                  233 GetEnvironmentVariableW
                  36E IsValidLocaleName
                  38D LCMapStringEx
                  339 HeapReAlloc
                  33B HeapSize
                  338 HeapQueryInformation

As you can see, all are standard Win32 stuff.

See also http://getwired.com/2011/09/20/win32-the-reports-of-my-death-are-greatly-exaggerated/

like image 199
Igor Skochinsky Avatar answered Oct 23 '22 06:10

Igor Skochinsky