Я пытаюсь получить размер файла системного приложения в окнах. Чтобы проверить это, я создал тестовое приложение, которое пытается получить размер файла smss.exe в C:\Windows\System32\smss.exe, но с ошибкой: ERROR_FILE_NOT_FOUND. Файл действительно существует (я проверил). Я также пробовал различные методы для получения размера файла с помощью: FindFirstFile, CreateFile и GetFileSizeEx. Но все возвращают ту же ошибку. Я также хотел бы прочитать содержимое файла.
Что я делаю не так?
Код:
// Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream>
__int64 getFileSize(LPWSTR filePath)
{
WIN32_FILE_ATTRIBUTE_DATA fad;
if (!GetFileAttributesEx(filePath, GetFileExInfoStandard, &fad))
{
_tprintf(TEXT("\n CAnt get file size for file %s error %d"), filePath, GetLastError());
return 0;
}
LARGE_INTEGER size;
size.HighPart = fad.nFileSizeHigh;
size.LowPart = fad.nFileSizeLow;
return size.QuadPart;
}
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(TEXT("File size %d "), getFileSize(L"C:\\Windows\\System32\\smss.exe"));
}
Поскольку ваше приложение 32-битное, система перенаправляет ваш путь, чтобы перейти на SysWOW64, а там нет smss.exe
. Хотя вы обнаружили, что Wow64DisableWow64FsRedirection
отключает это перенаправление, также подумайте, что использование 64-разрядной программы также поможет.
Получение размера файла уже здесь отвечает (еще не может добавить комментарий к вашему вопросу, поэтому мне нужно написать его как ответ): Как я могу получить размер файла в C++?
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::in | std::ifstream::binary);
in.seekg(0, std::ifstream::end);
return in.tellg();
}
smss.exe
не в SysWOW64 .