私はこのアプローチを使用しようとしました:
#include <windows.h>
#include <iostream>
int main() {
LARGE_INTEGER size;
HANDLE hFile = CreateFile("c:\\pagefile.sys", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) return(1);
GetFileSizeEx(hFile, &size);
CloseHandle(hFile);
std::cout << size.QuadPart << std::endl;
}
しかし、ご覧のとおり、ロックされている「pagefile.sys」を指していると、プログラムは INVALID_HANDLE_VALUE に遭遇します。ただし、システム以外のアプリは、ロックされたファイルのサイズを確認できます。たとえば、総司令官は約1GBを提供し、どこかからこの値を取得する必要があります(そのファイルを単純に右クリックすることは言うまでもありませんが、それはシステムプロセスであるため、ファイルはそれにロックされていません)。それで、その場合のwinapi呼び出しはありますか?
提案された修正を含めるようにコードを更新しましたが、まだ機能しません。
#include <windows.h>
#include <iostream>
int main() {
LARGE_INTEGER size;
HANDLE hFile = CreateFile("c:\\pagefile.sys", 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
std::cout << "GetLastError: " << GetLastError() << std::endl;
//says: 5 (0x5) ERROR_ACCESS_DENIED
if (hFile == INVALID_HANDLE_VALUE) return(1);
GetFileSizeEx(hFile, &size);
CloseHandle(hFile);
std::cout << size.QuadPart << std::endl;
}