Giter Site home page Giter Site logo

yy-thunks's People

Contributors

bh2wfr avatar cxxzhang avatar felixonmars avatar lygstate avatar mingkuang-chuyu avatar mourinaruto avatar sonyps5201314 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yy-thunks's Issues

YY_Thunks_for_Win2K.obj 链接错误,error LNK2001: 无法解析的外部符号 ___YY_Thunks_Process_Terminating

问题简介:
我最近在开发一个需要兼容windows 2000的程序,在使用最新的代码编译出 YY_Thunks_for_Win2K.obj,然后链接它时会出现链接错误 error LNK2001: 无法解析的外部符号 ___YY_Thunks_Process_Terminating。
分析:
我这边看了一下源代码,看到该变量被定义在了pch.cpp中,而通过build.cmd进行构建时不会编译pch.cpp,故导致YY_Thunks.h里声明的__YY_Thunks_Process_Terminating 没有定义。

我这边试着去掉了 pch.cpp 里面的 __YY_Thunks_Process_Terminating 的定义,然后在YY_Thunks.cpp 第 124行 加上了

#if (YY_Thunks_Support_Version < NTDDI_WINXP)
EXTERN_C BOOL __YY_Thunks_Process_Terminating = 0;
#endif

解决了该问题

请问这个可以用在QT项目上么?

因为QT高版本不支持windows的低版本,比如,QT6不支持windows7,QT5.7以上不支持xp,如果使用msvc编译器的话,应该问题不大,但如果使用的是mingw编译器的话,不知道可以么?

无法解析的外部符号 _wcsicmp,函数 _GetDynamicTimeZoneInformation@4 中引用了该符号

我在 rust 中尝试使用这个库来兼容老版本的 xp 系统,编译时遇到这个问题,环境信息:
image

  • windows11
  • vs2019
  • rust 1.65

我做了一些尝试,比如添加 vcruntimelib msvcrt.lib 等均没有作用,通过打印 verbose 日志,我发现 __wcsicmp 这个函数有被找到

image

感觉表现比较奇怪,来求助一下。

我的编译选项:

$env:RUSTFLAGS='-Ctarget-feature=+crt-static -Clink-args=/subsystem:console,5.01 -Clink-args=YY_Thunks_for_WinXP.obj -Clink-args=/verbose'
cargo build --target i686-pc-windows-msvc -v

代码是一个 hello word,感觉不是 rust 的问题

// main.rs
fn main() {
    println!("hello world");
}

Software Support and Windows 7

Hi, I make this topic more to make some questions,
I would like know what software have been test which works now with YY-Thunks in Windows XP, could be nice have some list with details and maybe screenshots even.

And.. I wonder also if possible even used with Windows 7, since now some software like Adobe Photosho 2021 (v22) and more recent 2020 (v21) have dropped Windows 7 support, where is not even possible to install.
Othe software without Windows 7 support now is VMware 16.x, this was solved thanks to archeYR (has a YouTube channel), but it might be nice to actually solve this too with something like YY-Thunks as well..

https://youtu.be/j7AaMKg607Q

YY-Thunks提供lib使用模式(lld-link)

lld-link 重复符号默认会报告错误,所以YY-Thunks提供修改后的 kernel32.lib ws2_32.lib和advapi.lib

支持这种使用场景

Lib模式大致框架,以RegDeleteKeyExW 函数为例

想法是,向kernel32.lib注入YY-Thunks.obj,然后提供符号YY_Thunks_RegDeleteKeyExW
再向advapi.lib注入WeakAlias,将RegDeleteKeyExW符号自动转发到YY_Thunks_RegDeleteKeyExW

最终RegDeleteKeyExW就被链接器转换到kernel32.lib里的YY_Thunks_RegDeleteKeyExW(YY-Thunks.obj),完成这个链接时Hook。

flowchart TD;
RegDeleteKeyExW-->advapi.lib
advapi.lib-->WeakAlias
WeakAlias-->YY_Thunks_RegDeleteKeyExW
YY_Thunks_RegDeleteKeyExW-->kernel32.lib
kernel32.lib-->YY-Thunks.obj
Loading

Tokio support (Rust)

Hello.
Tokio is an event-driven, non-blocking I/O platform for writing asynchronous applications with the Rust programming language.

I'm currently writing a small server-client application using the Tokio crate. I intended to write a very simple client with minimal dependencies, but it turns out that the core of my program - Tokio - already includes a few unresolved characters on Windows XP.
When I try to run the given program's executable on Win XP:

Cargo.toml:

[package]
...

[dependencies]
tokio = { version = "1", features = ["full"] }

src/main.rs:

#[tokio::main]
async fn main() { }

i get two unresolved characters - GetQueuedCompletionStatusEx (MS docs) in kernel32.dll and NtCancelIoFileEx (MS docs) in ntdll.dll.

And this program (an example of a simple TCP server from https://crates.io/crates/tokio):

use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
     let listener = TcpListener::bind("127.0.0.1:8080").await?;

     loop {
         let (mut socket, _) = listener.accept().await?;

         tokio::spawn(async move {
             let mutbuf = [0; 1024];

             // In a loop, read data from the socket and write the data back.
             loop {
                 let n = match socket.read(&mut buf).await {
                     // socket closed
                     Ok(n) if n == 0 => return,
                     Ok(n) => n,
                     Err(e) => {
                         eprintln!("failed to read from socket; err = {:?}", e);
                         return;
                     }
                 };

                 // Write the data back
                 if let Err(e) = socket.write_all(&buf[0..n]).await {
                     eprintln!("failed to write to socket; err = {:?}", e);
                     return;
                 }
             }
         });
     }
}

adds one more unresolved symbol - SetFileCompletionNotificationModes (MS docs) in kernel32.dll

Is it possible to implement these functions?

Wine implementation of these functions:

I appreciate your work. Thanks.

Implement more mapping for KnownFoldersIdsMap

At least:


					//{ FOLDERID_Downloads, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PublicDownloads, CSIDL_CDBURN_AREA },
			//Vista以后的Shell32.dll 有个 kfapi::GetFolderIdByCSIDL,我们可以根据它可以反推出出 下面的KnownFoldersIdToCSIDL
			static int __fastcall KnownFoldersIdToCSIDL(const GUID& rfid)
			{

				constexpr static const KnownFoldersIdKey KnownFoldersIdsMap[] =
				{
					{ FOLDERID_Windows, CSIDL_WINDOWS },
					{ FOLDERID_ProgramFilesCommon, CSIDL_PROGRAM_FILES_COMMON },
					{ FOLDERID_PublicDesktop, CSIDL_COMMON_DESKTOPDIRECTORY },
					{ FOLDERID_CDBurning, CSIDL_CDBURN_AREA },
					{ FOLDERID_CommonStartMenu, CSIDL_COMMON_STARTMENU },
					{ FOLDERID_Videos, CSIDL_MYVIDEO },
					{ FOLDERID_ProgramFilesCommonX86, CSIDL_PROGRAM_FILES_COMMONX86 },
					{ FOLDERID_ConnectionsFolder, CSIDL_CONNECTIONS },
					{ FOLDERID_PrintersFolder, CSIDL_PRINTERS },
					{ FOLDERID_Pictures, CSIDL_MYPICTURES },
					{ FOLDERID_ResourceDir, CSIDL_RESOURCES },
					{ FOLDERID_CommonStartup, CSIDL_COMMON_STARTUP /*等价CSIDL_COMMON_ALTSTARTUP*/},
					{ FOLDERID_PublicVideos, CSIDL_COMMON_VIDEO },
					{ FOLDERID_Desktop, CSIDL_DESKTOP /*等价CSIDL_DESKTOPDIRECTORY*/},
					{ FOLDERID_History, CSIDL_HISTORY },
					{ FOLDERID_SamplePictures, CSIDL_COMMON_PICTURES }, //做个兼容处理吧,反正都是放图片的
					{ FOLDERID_RecycleBinFolder, CSIDL_BITBUCKET },
					{ FOLDERID_CommonPrograms, CSIDL_COMMON_PROGRAMS },
					{ FOLDERID_NetHood, CSIDL_NETHOOD },
					{ FOLDERID_Cookies, CSIDL_COOKIES },
					{ FOLDERID_LocalizedResourcesDir, CSIDL_RESOURCES_LOCALIZED },
					{ FOLDERID_Favorites, CSIDL_FAVORITES /*等价于CSIDL_COMMON_FAVORITES*/},
					{ FOLDERID_SampleMusic, CSIDL_COMMON_MUSIC }, //做个兼容处理吧,反正都是放音乐的
					{ FOLDERID_SendTo, CSIDL_SENDTO },
					{ FOLDERID_AdminTools, CSIDL_ADMINTOOLS },
					{ FOLDERID_Music, CSIDL_MYMUSIC },
					{ FOLDERID_InternetFolder, CSIDL_INTERNET },
					{ FOLDERID_System, CSIDL_SYSTEM },
					{ FOLDERID_Programs, CSIDL_PROGRAMS },
#ifdef _AMD64_
					{ FOLDERID_ProgramFilesX64, CSIDL_PROGRAM_FILES }, //兼容下,反正 x64路径 跟 普通的是一样的。
#endif
					{ FOLDERID_ComputerFolder, CSIDL_DRIVES },
					{ FOLDERID_CommonAdminTools, CSIDL_COMMON_ADMINTOOLS },
					{ FOLDERID_Recent, CSIDL_RECENT },
					{ FOLDERID_ProgramData, CSIDL_COMMON_APPDATA },
					{ FOLDERID_LocalAppData, CSIDL_LOCAL_APPDATA },
					{ FOLDERID_PublicPictures, CSIDL_COMMON_PICTURES },
					{ FOLDERID_PrintHood, CSIDL_PRINTHOOD },
					{ FOLDERID_Profile, CSIDL_PROFILE },
					{ FOLDERID_SampleVideos, CSIDL_COMMON_VIDEO }, //做个兼容处理吧,反正都是放视频的
					{ FOLDERID_LocalAppDataLow, CSIDL_LOCAL_APPDATA }, //兼容下,直接用AppData
#ifdef _AMD64_
					{ FOLDERID_ProgramFilesCommonX64, CSIDL_PROGRAM_FILES_COMMON }, //兼容下,反正 x64路径 跟 普通的是一样的。
#endif
					{ FOLDERID_PublicDocuments, CSIDL_COMMON_DOCUMENTS },
					{ FOLDERID_SystemX86, CSIDL_SYSTEMX86 },
					{ FOLDERID_PublicMusic, CSIDL_COMMON_MUSIC },
					{ FOLDERID_ProgramFiles, CSIDL_PROGRAM_FILES },
					{ FOLDERID_Fonts, CSIDL_FONTS },
					{ FOLDERID_Startup, CSIDL_STARTUP /*等效CSIDL_ALTSTARTUP*/},
					{ FOLDERID_StartMenu, CSIDL_STARTMENU },
					{ FOLDERID_NetworkFolder, CSIDL_NETWORK /*等效CSIDL_COMPUTERSNEARME*/},
					{ FOLDERID_Documents, CSIDL_MYDOCUMENTS },
					{ FOLDERID_CommonOEMLinks, CSIDL_COMMON_OEM_LINKS },
					{ FOLDERID_RoamingAppData, CSIDL_APPDATA },
					{ FOLDERID_CommonTemplates, CSIDL_COMMON_TEMPLATES },
					{ FOLDERID_InternetCache, CSIDL_INTERNET_CACHE },
					{ FOLDERID_Templates, CSIDL_TEMPLATES },
					{ FOLDERID_ControlPanelFolder, CSIDL_CONTROLS },
					{ FOLDERID_ProgramFilesX86, CSIDL_PROGRAM_FILESX86 },

					//{ FOLDERID_SyncManagerFolder, CSIDL_PRINTERS },
					//{ FOLDERID_SyncSetupFolder, CSIDL_PRINTERS },
					//{ FOLDERID_ConflictFolder, CSIDL_PRINTERS },
					//{ FOLDERID_SyncResultsFolder, CSIDL_PRINTERS },
					//{ FOLDERID_UserProgramFiles, CSIDL_PROGRAM_FILES_COMMON },
					//{ FOLDERID_UserProgramFilesCommon, CSIDL_PROGRAM_FILES_COMMON },
					//{ FOLDERID_Ringtones, CSIDL_MYVIDEO },
					//{ FOLDERID_PublicRingtones, CSIDL_COMMON_VIDEO },
					//{ FOLDERID_UserProfiles, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Playlists, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SamplePlaylists, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PhotoAlbums, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Public, CSIDL_CDBURN_AREA },
					//{ FOLDERID_ChangeRemovePrograms, CSIDL_CDBURN_AREA },
					//{ FOLDERID_AppUpdates, CSIDL_CDBURN_AREA },
					//{ FOLDERID_AddNewPrograms, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Downloads, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PublicDownloads, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SavedSearches, CSIDL_CDBURN_AREA },
					//{ FOLDERID_QuickLaunch, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Contacts, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SidebarParts, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SidebarDefaultParts, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PublicGameTasks, CSIDL_CDBURN_AREA },
					//{ FOLDERID_GameTasks, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SavedGames, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Games, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SEARCH_MAPI, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SEARCH_CSC, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Links, CSIDL_CDBURN_AREA },
					//{ FOLDERID_UsersFiles, CSIDL_CDBURN_AREA },
					//{ FOLDERID_UsersLibraries, CSIDL_CDBURN_AREA },
					//{ FOLDERID_SearchHome, CSIDL_CDBURN_AREA },
					//{ FOLDERID_OriginalImages, CSIDL_CDBURN_AREA },
					//{ FOLDERID_DocumentsLibrary, CSIDL_CDBURN_AREA },
					//{ FOLDERID_MusicLibrary, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PicturesLibrary, CSIDL_CDBURN_AREA },
					//{ FOLDERID_VideosLibrary, CSIDL_CDBURN_AREA },
					//{ FOLDERID_RecordedTVLibrary, CSIDL_CDBURN_AREA },
					//{ FOLDERID_HomeGroup, CSIDL_CDBURN_AREA },
					//{ FOLDERID_HomeGroupCurrentUser, CSIDL_CDBURN_AREA },
					//{ FOLDERID_DeviceMetadataStore, CSIDL_CDBURN_AREA },
					//{ FOLDERID_Libraries, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PublicLibraries, CSIDL_CDBURN_AREA },
					//{ FOLDERID_UserPinned, CSIDL_CDBURN_AREA },
					//{ FOLDERID_ImplicitAppShortcuts, CSIDL_CDBURN_AREA },
					//{ FOLDERID_AccountPictures, CSIDL_CDBURN_AREA },
					//{ FOLDERID_PublicUserTiles, CSIDL_CDBURN_AREA },
					//{ FOLDERID_AppsFolder, CSIDL_CDBURN_AREA },
					//{ FOLDERID_StartMenuAllPrograms, CSIDL_CDBURN_AREA },
				};

缺少 iphlpapi 相关函数支持

在使用 sysinfo 这个库时,会报错,具体的代码和测试用的 binary 见附件。
经过验证,发现缺少 iphlpapi 中 的如下函数:

  • GetIfEntry2
  • GetIfTable2
  • FreeMibTable

主要用来获取网卡信息,感谢作者~
learn.zip

添加Threadpool

暂时的,我们只实现2019 CRT必须的API,其他后续想办法补充。也欢迎提交PR。

Pool

  • CreateThreadpool
  • CloseThreadpool
  • SetThreadpoolThreadMaximum
  • SetThreadpoolThreadMinimum
  • SetThreadpoolStackInformation
  • QueryThreadpoolStackInformation

Work

  • CreateThreadpoolWork
  • CloseThreadpoolWork
  • SubmitThreadpoolWork
  • WaitForThreadpoolWorkCallbacks
  • TrySubmitThreadpoolCallback

Timer

  • CreateThreadpoolTimer
  • CloseThreadpoolTimer
  • SetThreadpoolTimer
  • WaitForThreadpoolTimerCallbacks
  • IsThreadpoolTimerSet

Others

  • SetEventWhenCallbackReturns
  • ReleaseSemaphoreWhenCallbackReturns
  • ReleaseMutexWhenCallbackReturns
  • LeaveCriticalSectionWhenCallbackReturns
  • FreeLibraryWhenCallbackReturns
  • CallbackMayRunLong
  • DisassociateCurrentThreadFromCallback

CleanupGroup

  • CreateThreadpoolCleanupGroup
  • CloseThreadpoolCleanupGroupMembers
  • CloseThreadpoolCleanupGroup

Wait

  • CreateThreadpoolWait
  • CloseThreadpoolWait
  • SetThreadpoolWait
  • WaitForThreadpoolWaitCallbacks

rust程序启动时报告 bcrypt.dll缺失

After some struggle #47, I was finally able to run a hello world program in windows XP, but there are still some errors before I can actually use it.

image

Import Table Information:
image

If I place a fake bcrypt.dll inside the folder, there will be other errors.

image
So we need to add at least these APIs.

// bcrypt.dll 
BCryptCloseAlgorithmProvider	
BCryptOpenAlgorithmProvider 	
BCryptGenRandom
// ntdll.dll
EtwTraceMessage        	

I'm almost ready to give up on xp support, there are too much trouble :(

YY-Thunks初始化性能优化

1. 背景

之前为了解决Bug #7, 特意在Init时加载了所有的try_get_, _FUNCTION。这导致某些场景,这可能调用数百次,拖慢速度。

2. 优化

理论上,所有Load dll工作可能再复杂的场景死锁。但是我们其实只需要调用 try_get_module_, _MODULE
try_get_, _FUNCTION中只是多了GetProcAddress,但是GetProcAddress并不会引入锁。

所以改成 try_get_module_, _MODULE 这可以减少无意义的GetProcAddress次数。

3. 潜在风险

理论上没有风险。但是对初始化影响较大,不确定是否产生其他意外情况。

一些构建脚本问题

脚本:通过使用utf8编码,以及chcp 65001,支持含有中文的脚本;注释使用@Rem,::在一些地方用会导致问题。

脚本:
有以下问题:

C:\Code\Github_com\YY-Thunks>cl /O1 /Os /Oi /GS- /arch:IA32 /Z7 /MT /Fo"objs\\x86\\YY_Thunks_for_WinXP.obj" /Zl /c /D "NDEBUG" /D "YY_Thunks_Support_Version=NTDDI_WINXP" "C:\Code\Github_com\YY-Thunks\src\YY_Thunks.cpp"
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.16.27032.1 版
版权所有(C) Microsoft Corporation。保留所有权利。

YY_Thunks.cpp
C:\Code\Github_com\YY-Thunks\src\YY_Thunks.cpp : fatal error C1083: 无法打开编译器生成的文件: “C:\Code\Github_com\YY-Thunks\objs\x86\YY_Thunks_for_WinXP.obj”: No such file or directory

原因在于VS不会自动为/Fo选项指定的路径创建目录,需提前创建好此目录。

增加PathCch API

  • PathIsUNCEx
  • PathCchIsRoot
  • PathCchAddBackslashEx
  • PathCchAddBackslash
  • PathCchRemoveBackslashEx
  • PathCchRemoveBackslash
  • PathCchSkipRoot
  • PathCchStripToRoot
  • PathCchRemoveFileSpec
  • PathCchFindExtension
  • PathCchAddExtension
  • PathCchRenameExtension
  • PathCchRemoveExtension
  • PathCchCanonicalizeEx
  • PathCchCanonicalize
  • PathCchCombineEx
  • PathCchCombine
  • PathCchAppendEx
  • PathCchAppend
  • PathCchStripPrefix
  • PathAllocCombine
  • PathAllocCanonicalize

使用qt5.6.2编译winxp版本User32.lib相关符号解析失败

pro配置如下:
#----------------------------
QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = hello
TEMPLATE = app

win32 {
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE,5.01
DEFINES += ATL_XP_TARGETING
QMAKE_CFLAGS += /D_USING_V120_SDK71

QMAKE_CXXFLAGS += /D_USING_V120_SDK71_
LIBS *= -L"%Program Files (x86)%/Microsoft SDKs/Windows/7.1A/Lib"
INCLUDEPATH += "%Program Files (x86)%/Microsoft SDKs/Windows/7.1A/Include"
QMAKE_TARGET_OS = xp
QMAKE_LIBDIR += $$PWD/objs/x86
LIBS += YY_Thunks_for_WinXP.obj
}

SOURCES += main.cpp
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui
#----------------------------
使用的是YY-Thunks-1.0.6-Binary,报错如下,

YY_Thunks_for_WinXP.obj : error LNK2019: 无法解析的外部符号 __imp__GetSystemMetrics@4,该符号在函数 _GetSystemMetricsForDpi@8 中被引用
YY_Thunks_for_WinXP.obj : error LNK2019: 无法解析的外部符号 __imp__GetDC@4,该符号在函数 "unsigned int __fastcall YY::Thunks::internal::GetDpiForSystemDownlevel(void)" (?GetDpiForSystemDownlevel@internal@Thunks@YY@@Yiixz) 中被引用
YY_Thunks_for_WinXP.obj : error LNK2019: 无法解析的外部符号 __imp__ReleaseDC@8,该符号在函数 "unsigned int __fastcall YY::Thunks::internal::GetDpiForSystemDownlevel(void)" (?GetDpiForSystemDownlevel@internal@Thunks@YY@@Yiixz) 中被引用
YY_Thunks_for_WinXP.obj : error LNK2019: 无法解析的外部符号 __imp__AdjustWindowRectEx@16,该符号在函数 _AdjustWindowRectExForDpi@20 中被引用
YY_Thunks_for_WinXP.obj : error LNK2019: 无法解析的外部符号 __imp__SystemParametersInfoW@16,该符号在函数 _SystemParametersInfoForDpi@20 中被引用
YY_Thunks_for_WinXP.obj : error LNK2019: 无法解析的外部符号 __imp__MonitorFromWindow@8,该符号在函数 _GetDpiForWindow@4 中被引用
release\hello.exe : fatal error LNK1120: 6 个无法解析的外部命令

某些情况下导致死锁问题(感谢 冯立夫)

Vsitual Studio 2017 + Windows XP模式 + MT
运行环境:Windows 7 x64

死锁场景:
线程A:Thread创建回调 -->DLL Load锁定 --> tdp初始化 --> 等待locale锁
线程B:locale锁定 --> _Atexit --> EncodePointer(YY-Thunks) --> 等待 DLL Load锁

Fls支持

  • FlsFree
  • FlsSetValue
  • FlsGetValue
  • FlsAlloc

能与VC-LTL一起使用吗?

如题,这个项目能和VC-LTL一起使用吗?

另外再问一下,自述文件里只讲了VS的操作方法,用CMake的项目该怎么操作?

尝试消除Chrome 116项目中Windows XP、Windows 7不支持的接口

截至2023年7月8日,此列表更新为Chrome 116内核API缺失的情况。打勾则表明已经支持。

目前,此任务的优先级比较低,某些API完整的支持投入人力也比较惊人,也欢迎大家提供PR。

API行为修复

  • FindFirstFileEx
    • 针对XP、Vista添加FIND_FIRST_EX_LARGE_FETCH、FindExInfoBasic参数兼容

Windows 7缺失

KERNEL32.DLL

  • DiscardVirtualMemory
  • GetProcessMitigationPolicy
  • PrefetchVirtualMemory
  • SetDefaultDllDirectories
  • SetProcessInformation
  • SetProcessMitigationPolicy
  • SetThreadInformation
  • GetFirmwareType
  • GetThreadInformation

USERENV.DLL

  • CreateAppContainerProfile
  • DeriveAppContainerSidFromAppContainerName
  • GetAppContainerFolderPath
  • GetAppContainerRegistryLocation

ADVAPI32.DLL

  • EventSetInformation

MFPLAT.DLL

  • MFCreateDXGIDeviceManager
  • MFCreateDXGISurfaceBuffer
  • MFLockDXGIDeviceManager
  • MFUnlockDXGIDeviceManager

POWRPROF.DLL

  • PowerDeterminePlatformRoleEx

BLUETOOTHAPIS.DLL

  • BluetoothGATTGetCharacteristicValue
  • BluetoothGATTGetCharacteristics
  • BluetoothGATTGetDescriptors
  • BluetoothGATTGetServices
  • BluetoothGATTRegisterEvent
  • BluetoothGATTSetCharacteristicValue
  • BluetoothGATTSetDescriptorValue
  • BluetoothGATTUnregisterEvent

API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL

  • RoOriginateError

User32.dll

  • RegisterSuspendResumeNotification

NETAPI32.DLL

  • NetFreeAadJoinInformation
  • NetGetAadJoinInformation

WinHttp.dll

  • WinHttpCreateProxyResolver
  • WinHttpFreeProxyResult
  • WinHttpGetProxyForUrlEx
  • WinHttpGetProxyResult

Windows XP缺失

  • AcquireSRWLockExclusive
  • AcquireSRWLockShared
  • InitializeSRWLock
  • ReleaseSRWLockExclusive
  • ReleaseSRWLockShared
  • TryAcquireSRWLockExclusive
  • InitializeConditionVariable
  • SleepConditionVariableCS
  • SleepConditionVariableSRW
  • WakeAllConditionVariable
  • WakeConditionVariable
  • InitOnceBeginInitialize
  • InitOnceComplete
  • InitOnceExecuteOnce
  • InitializeCriticalSectionEx
  • CancelIoEx(仅支持)
  • GetCurrentProcessorNumber
  • QueryThreadCycleTime(仅支持)
  • GetCurrencyFormatEx
  • GetDateFormatEx
  • GetNumberFormatEx
  • GetTimeFormatEx
  • GetLocaleInfoEx
  • GetUserDefaultLocaleName
  • EnumSystemLocalesEx
  • GetThreadPreferredUILanguages
  • GetDynamicTimeZoneInformation
  • GetFinalPathNameByHandleW
  • GetFileInformationByHandleEx
  • SetFileInformationByHandle
  • GetProductInfo
  • GetThreadId
  • QueryFullProcessImageNameW
  • RaiseFailFastException
  • K32EmptyWorkingSet
  • K32EnumProcessModules
  • K32GetMappedFileNameW
  • K32GetModuleFileNameExW
  • K32GetModuleInformation
  • K32GetPerformanceInfo
  • K32GetProcessMemoryInfo
  • K32QueryWorkingSetEx(仅支持)
  • LCIDToLocaleName
  • LocaleNameToLCID
  • ResolveLocaleName
  • DeleteProcThreadAttributeList
  • InitializeProcThreadAttributeList
  • UpdateProcThreadAttribute(仅接口支持,实际不生效)
  • IsThreadAFiber
  • ConvertThreadToFiberEx
  • FlsAlloc
  • FlsSetValue
  • PowerClearRequest
  • PowerCreateRequest
  • PowerSetRequest
  • CloseThreadpool
  • CloseThreadpoolWork
  • CreateThreadpool
  • CreateThreadpoolWork
  • SetThreadpoolThreadMaximum
  • SetThreadpoolThreadMinimum
  • SubmitThreadpoolWork
  • CallbackMayRunLong
  • WaitForThreadpoolWorkCallbacks

WinRT Downlevel改进

为 RoInitialize、RoUninitialize提供 Fallback

其他WinRT的参数返回再修正一下,让他更合理。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.