{"id":7842,"date":"2021-07-10T16:51:33","date_gmt":"2021-07-10T16:51:33","guid":{"rendered":"https:\/\/www.hexacorn.com\/blog\/?p=7842"},"modified":"2021-07-11T14:07:57","modified_gmt":"2021-07-11T14:07:57","slug":"wine-tasting-again","status":"publish","type":"post","link":"https:\/\/www.hexacorn.com\/blog\/2021\/07\/10\/wine-tasting-again\/","title":{"rendered":"Wine tasting, again"},"content":{"rendered":"\n<p>In my old <a href=\"https:\/\/www.hexacorn.com\/blog\/2016\/03\/27\/detecting-wine-via-internal-and-legacy-apis\/\" data-type=\"post\" data-id=\"3565\">post<\/a> I have listed a number of wine functions that are exported in that environment and are not present in Windows libraries. 5 years later I decided to re-visit that post and update it with the info from the latest wine vs Windows 10 death match.<\/p>\n\n\n\n<p>The list of APIs has changed, and a new set of functions that can be used to distinguish between the two environments are listed below. <\/p>\n\n\n\n<p>The test program can be downloaded <a href=\"https:\/\/hexacorn.com\/d\/2021-07-10_wine_detect.exe\">here<\/a>.<\/p>\n\n\n\n<p><strong>Wine<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/wine1.png\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"751\" src=\"https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/wine1-1024x751.png\" alt=\"\" class=\"wp-image-7844\" srcset=\"https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/wine1-1024x751.png 1024w, https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/wine1-300x220.png 300w, https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/wine1-768x563.png 768w, https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/wine1.png 1140w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Windows 10<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/windows1.png\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"780\" src=\"https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/windows1-1024x780.png\" alt=\"\" class=\"wp-image-7843\" srcset=\"https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/windows1-1024x780.png 1024w, https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/windows1-300x228.png 300w, https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/windows1-768x585.png 768w, https:\/\/www.hexacorn.com\/blog\/wp-content\/uploads\/2021\/07\/windows1.png 1044w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><strong>List of functions<\/strong><\/p>\n\n\n\n<ul><li>advapi32.dll!LookupAccountSidLocalA<\/li><li>advapi32.dll!LookupAccountSidLocalW<\/li><li>advapi32.dll!LsaRegisterPolicyChangeNotification<\/li><li>advapi32.dll!LsaUnregisterPolicyChangeNotification<\/li><li>advapi32.dll!QueryWindows31FilesMigration<\/li><li>advapi32.dll!SynchronizeWindows31FilesAndWindowsNTRegistry<\/li><li>comctl32.dll!DPA_GetSize<\/li><li>comctl32.dll!DrawShadowText<\/li><li>comctl32.dll!DSA_Clone<\/li><li>comctl32.dll!DSA_GetSize<\/li><li>comctl32.dll!GetWindowSubclass<\/li><li>comctl32.dll!HIMAGELIST_QueryInterface<\/li><li>comctl32.dll!ImageList_CoCreateInstance<\/li><li>comctl32.dll!LoadIconMetric<\/li><li>comctl32.dll!LoadIconWithScaleDown<\/li><li>comctl32.dll!TaskDialog<\/li><li>comctl32.dll!TaskDialogIndirect<\/li><li>dbgeng.dll!DebugExtensionInitialize<\/li><li>dnsapi.dll!DnsAcquireContextHandle_UTF8<\/li><li>gdi32.dll!GetDCHook<\/li><li>gdi32.dll!pfnRealizePalette<\/li><li>gdi32.dll!pfnSelectPalette<\/li><li>gdi32.dll!SetDCHook<\/li><li>gdi32.dll!SetHookFlags<\/li><li>gdi32.dll!SetObjectOwner<\/li><li>gdi32.dll!__wine_get_vulkan_driver<\/li><li>gdi32.dll!__wine_get_wgl_driver<\/li><li>gdi32.dll!__wine_make_gdi_object_system<\/li><li>gdi32.dll!__wine_set_display_driver<\/li><li>gdi32.dll!__wine_set_visible_region<\/li><li>imm32.dll!__wine_get_ui_window<\/li><li>imm32.dll!__wine_register_window<\/li><li>imm32.dll!__wine_unregister_window<\/li><li>inseng.dll!DllInstall<\/li><li>IPHLPAPI.dll!AllocateAndGetIfTableFromStack<\/li><li>IPHLPAPI.dll!AllocateAndGetIpForwardTableFromStack<\/li><li>IPHLPAPI.dll!AllocateAndGetIpNetTableFromStack<\/li><li>IPHLPAPI.dll!AllocateAndGetTcpExTableFromStack<\/li><li>IPHLPAPI.dll!AllocateAndGetTcpTableFromStack<\/li><li>IPHLPAPI.dll!AllocateAndGetUdpTableFromStack<\/li><li>kernel32.dll!ConvertToGlobalHandle<\/li><li>kernel32.dll!GetDaylightFlag<\/li><li>kernel32.dll!GetProcessFlags<\/li><li>kernel32.dll!InvalidateNLSCache<\/li><li>kernel32.dll!MakeCriticalSectionGlobal<\/li><li>kernel32.dll!OpenVxDHandle<\/li><li>kernel32.dll!RegisterServiceProcess<\/li><li>kernel32.dll!ReinitializeCriticalSection<\/li><li>kernel32.dll!SetCPGlobal<\/li><li>kernel32.dll!UninitializeCriticalSection<\/li><li>kernel32.dll!wine_get_dos_file_name<\/li><li>kernel32.dll!wine_get_unix_file_name<\/li><li>kernel32.dll!__wine_start_process<\/li><li>mpr.dll!NPSAuthenticationDialogA<\/li><li>mpr.dll!NPSCopyStringA<\/li><li>mpr.dll!NPSDeviceGetNumberA<\/li><li>mpr.dll!NPSDeviceGetStringA<\/li><li>mpr.dll!NPSGetProviderHandleA<\/li><li>mpr.dll!NPSGetProviderNameA<\/li><li>mpr.dll!NPSGetSectionNameA<\/li><li>mpr.dll!NPSNotifyGetContextA<\/li><li>mpr.dll!NPSNotifyRegisterA<\/li><li>mpr.dll!NPSSetCustomTextA<\/li><li>mpr.dll!NPSSetExtendedErrorA<\/li><li>mpr.dll!PwdChangePasswordA<\/li><li>mpr.dll!PwdChangePasswordW<\/li><li>mpr.dll!PwdGetPasswordStatusA<\/li><li>mpr.dll!PwdGetPasswordStatusW<\/li><li>mpr.dll!PwdSetPasswordStatusA<\/li><li>mpr.dll!PwdSetPasswordStatusW<\/li><li>mpr.dll!WNetCachePassword<\/li><li>mpr.dll!WNetEnumCachedPasswords<\/li><li>mpr.dll!WNetGetCachedPassword<\/li><li>mpr.dll!WNetLogoffA<\/li><li>mpr.dll!WNetLogoffW<\/li><li>mpr.dll!WNetLogonA<\/li><li>mpr.dll!WNetLogonW<\/li><li>mpr.dll!WNetRemoveCachedPassword<\/li><li>mpr.dll!WNetRestoreConnectionA<\/li><li>mpr.dll!WNetRestoreConnectionW<\/li><li>mpr.dll!WNetVerifyPasswordA<\/li><li>mpr.dll!WNetVerifyPasswordW<\/li><li>msctf.dll!TF_InitMlngInfo<\/li><li>mshtml.dll!NP_GetEntryPoints<\/li><li>mshtml.dll!RNIGetCompatibleVersion<\/li><li>msi.dll!__wine_msi_call_dll_function<\/li><li>netapi32.dll!I_BrowserQueryEmulatedDomains<\/li><li>netapi32.dll!I_NetNameCompare<\/li><li>netapi32.dll!I_NetNameValidate<\/li><li>netapi32.dll!NetpGetComputerName<\/li><li>ntdll.dll!NtClearPowerRequest<\/li><li>ntdll.dll!NtCreatePowerRequest<\/li><li>ntdll.dll!NtSetPowerRequest<\/li><li>ntdll.dll!RtlFindLastBackwardRunSet<\/li><li>ntdll.dll!RtlFindLongestRunSet<\/li><li>ntdll.dll!RtlFindNextForwardRunSet<\/li><li>ntdll.dll!RtlFindSetRuns<\/li><li>ntdll.dll!wine_nt_to_unix_file_name<\/li><li>ntdll.dll!wine_server_call<\/li><li>ntdll.dll!wine_server_fd_to_handle<\/li><li>ntdll.dll!wine_server_handle_to_fd<\/li><li>ntdll.dll!wine_server_release_fd<\/li><li>ntdll.dll!wine_server_send_fd<\/li><li>ntdll.dll!wine_unix_to_nt_file_name<\/li><li>ntdll.dll!__wine_dbg_get_channel_flags<\/li><li>ntdll.dll!__wine_dbg_header<\/li><li>ntdll.dll!__wine_dbg_output<\/li><li>ntdll.dll!__wine_dbg_strdup<\/li><li>ntdll.dll!__wine_get_unix_codepage<\/li><li>ntdll.dll!__wine_locked_recvmsg<\/li><li>ntdll.dll!__wine_make_process_system<\/li><li>ntdll.dll!__wine_set_signal_handler<\/li><li>ole32.dll!CoGetState<\/li><li>Query.dll!CIState<\/li><li>Query.dll!LocateCatalogsA<\/li><li>Query.dll!LocateCatalogsW<\/li><li>rpcrt4.dll!I_RpcBindingSetAsync<\/li><li>rpcrt4.dll!I_RpcServerStartListening<\/li><li>rpcrt4.dll!I_RpcServerStopListening<\/li><li>rpcrt4.dll!I_RpcWindowProc<\/li><li>rpcrt4.dll!NdrAsyncStubCall<\/li><li>serialui.dll!EnumPropPages<\/li><li>setupapi.dll!AssertFail<\/li><li>setupapi.dll!CaptureAndConvertAnsiArg<\/li><li>setupapi.dll!CaptureStringArg<\/li><li>setupapi.dll!DelayedMove<\/li><li>setupapi.dll!DuplicateString<\/li><li>setupapi.dll!EnablePrivilege<\/li><li>setupapi.dll!FileExists<\/li><li>setupapi.dll!MultiByteToUnicode<\/li><li>setupapi.dll!OpenAndMapFileForRead<\/li><li>setupapi.dll!QueryRegistryValue<\/li><li>setupapi.dll!RegistryDelnode<\/li><li>setupapi.dll!RetreiveFileSecurity<\/li><li>setupapi.dll!StampFileSecurity<\/li><li>setupapi.dll!StringTableAddString<\/li><li>setupapi.dll!StringTableAddStringEx<\/li><li>setupapi.dll!StringTableDestroy<\/li><li>setupapi.dll!StringTableDuplicate<\/li><li>setupapi.dll!StringTableGetExtraData<\/li><li>setupapi.dll!StringTableInitialize<\/li><li>setupapi.dll!StringTableInitializeEx<\/li><li>setupapi.dll!StringTableLookUpString<\/li><li>setupapi.dll!StringTableLookUpStringEx<\/li><li>setupapi.dll!StringTableSetExtraData<\/li><li>setupapi.dll!StringTableStringFromId<\/li><li>setupapi.dll!StringTableStringFromIdEx<\/li><li>setupapi.dll!StringTableTrim<\/li><li>setupapi.dll!TakeOwnershipOfFile<\/li><li>setupapi.dll!UnmapAndCloseFile<\/li><li>shdocvw.dll!InstallReg_RunDLL<\/li><li>shell32.dll!CheckEscapesA<\/li><li>shell32.dll!Control_FillCache_RunDLLA<\/li><li>shell32.dll!Control_FillCache_RunDLLW<\/li><li>shell32.dll!ExtractVersionResource16W<\/li><li>shell32.dll!Printers_RegisterWindowW<\/li><li>shell32.dll!Printers_UnregisterWindow<\/li><li>shell32.dll!Printer_LoadIconsW<\/li><li>shell32.dll!SheChangeDirW<\/li><li>shell32.dll!SheGetDirW<\/li><li>shell32.dll!SHRegCloseKey<\/li><li>shell32.dll!SHRegDeleteKeyW<\/li><li>shell32.dll!SHRegOpenKeyA<\/li><li>shell32.dll!SHRegOpenKeyW<\/li><li>shell32.dll!SHRegQueryValueA<\/li><li>shell32.dll!SHRegQueryValueExA<\/li><li>shell32.dll!SHRegQueryValueExW<\/li><li>shell32.dll!SHRegQueryValueW<\/li><li>shlwapi.dll!MLFreeLibrary<\/li><li>shlwapi.dll!ShellMessageBoxWrapW<\/li><li>shlwapi.dll!_SHGetInstanceExplorer<\/li><li>sti.dll!StiCreateInstanceA<\/li><li>user32.dll!CalcChildScroll<\/li><li>user32.dll!CharNextExW<\/li><li>user32.dll!CharPrevExW<\/li><li>user32.dll!KillSystemTimer<\/li><li>user32.dll!SetDeskWallPaper<\/li><li>user32.dll!SetLogonNotifyWindow<\/li><li>user32.dll!SetSystemTimer<\/li><li>user32.dll!UserSignalProc<\/li><li>user32.dll!__wine_send_input<\/li><li>user32.dll!__wine_set_pixel_format<\/li><li>winmm.dll!GetDriverFlags<\/li><li>winmm.dll!OpenDriverA<\/li><li>wsock32.dll!WsControl<\/li><li>XInput1_4.dll!XInputGetStateEx<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In my old post I have listed a number of wine functions that are exported in that environment and are not present in Windows libraries. 5 years later I decided to re-visit that post and update it with the info &hellip; <a href=\"https:\/\/www.hexacorn.com\/blog\/2021\/07\/10\/wine-tasting-again\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[43],"tags":[],"_links":{"self":[{"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/posts\/7842"}],"collection":[{"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/comments?post=7842"}],"version-history":[{"count":2,"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/posts\/7842\/revisions"}],"predecessor-version":[{"id":7847,"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/posts\/7842\/revisions\/7847"}],"wp:attachment":[{"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/media?parent=7842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/categories?post=7842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hexacorn.com\/blog\/wp-json\/wp\/v2\/tags?post=7842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}