Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bazı durumlarda belirli bir API kümesi sözleşme adı, bazı Windows cihazlarında kasıtlı olarak boş bir modül adıyla eşlenebilir. Bunun nedenleri farklılık gösterir, ancak yaygın bir örnek, kaynak kısıtlanmış bir cihaz için yapılandırıldığında sistem kaynakları açısından pahalı bir özelliğin Windows işletim sisteminden kaldırılabilmesidir. Bu, uygulamaların API düzeyinde isteğe bağlı özellikleri düzgün bir şekilde işlemesi için bir zorluk oluşturur.
Win32 API'sinin kullanılabilir olup olmadığını test etmek için kullanılan geleneksel yaklaşım, LoadLibrary veya getProcAddress kullanmaktır. Ancak bunlar, Windows 10 ve sonraki sürümlerde ters iletme desteği nedeniyle API kümelerini test etmede güvenilir bir araç değildir. Belirli bir API'ye ters iletme uygulandığında, LoadLibrary veya GetProcAddress , iç uygulamanın kaldırıldığı durumlarda bile geçerli bir işlev işaretçisine çözümlenebilir. Bu durumda, işlev işaretçisi yalnızca hata döndüren bir saplama işlevini işaret eder.
Bu durumu algılamak için IsApiSetImplemented işlevini kullanarak belirli bir API uygulamasının temel kullanılabilirliğini sorgulayabilirsiniz. Bu test, bu işlevin çağrılmasının API'nin işlevsel bir uygulamasının yürütülmesine neden olacağını doğrular.
Aşağıdaki kod örneğinde, WTSEnumerateSessions işlevini çağırmadan önce geçerli cihazda kullanılabilir olup olmadığını belirlemek için IsApiSetImplemented nasıl kullanılacağı gösterilmektedir.
#include <windows.h>
#include <stdio.h>
#include <Wtsapi32.h>
int __cdecl wmain(int /* argc */, PCWSTR /* argv */ [])
{
PWTS_SESSION_INFO pInfo = {};
DWORD count = 0;
if (!IsApiSetImplemented("ext-ms-win-session-wtsapi32-l1-1-0"))
{
wprintf(L"IsApiSetImplemented on ext-ms-win-session-wtsapi32-l1-1-0 returns FALSE\n");
}
else
{
if (WTSEnumerateSessionsW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pInfo, &count))
{
wprintf(L"SessionCount = %d\n", count);
for (ULONG i = 0; i < count; i++)
{
PWTS_SESSION_INFO pCurInfo = &pInfo[i];
wprintf(L" %s: ID = %d, state = %d\n", pCurInfo->pWinStationName,
pCurInfo->SessionId, pCurInfo->State);
}
WTSFreeMemory(pInfo);
}
else
{
wprintf(L"WTSEnumerateSessions failure : %x\n", GetLastError());
}
}
return 0;
}