Задача — получить функцию Windows API (Vista+), но как-то (может, не столь эффективно) работать на XP+.
namespace {
typedef BOOL WINAPI (*EvCancelIoEx) ( // ev = event
_In_ HANDLE hFile,
_In_opt_ LPOVERLAPPED lpOverlapped
);
EvCancelIoEx cancelIoEx = NULL;
} // anon namespace
void st::AsyncFile::detectWinVersion() // static, вызывается из main, случай для cancelIoEx=NULL прописан
{
HMODULE hKernel = LoadLibrary(L"kernel32.dll");
if (hKernel) {
cancelIoEx = reinterpret_cast<EvCancelIoEx>(GetProcAddress(hKernel, "CancelIoEx"));
} else {
cancelIoEx = NULL;
}
// We won’t free library, everyone uses kernel32!
}
Есть ли какие-то нарекания к безопасности? Возможно ли внедрение DLL и как его обойти?