gpt4 book ai didi

c - GetFileSizeEx 文件映射失败

转载 作者:可可西里 更新时间:2023-11-01 11:14:12 25 4
gpt4 key购买 nike

我在创建命名共享内存和检查其大小时遇到​​问题。当我在这样的函数中调用它时,函数 GetFileSizeEx 失败。关于如何调试这个的任何想法?

void test_getsize(const char* lpName, int size){

HANDLE handle = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
size, // maximum object size (low-order DWORD)
lpName); // name of mapping object

if (handle== NULL || handle== INVALID_HANDLE_VALUE){
last_error = get_error_from_errorno();
*error_return =1;
}


LARGE_INTEGER new_size;

err = GetFileSizeEx(handle, &new_size);

if (err==0){ printf("err ");} else {printf("pass ");}
printf("size=%lu\n", (unsigned long)new_size.QuadPart);
}

最佳答案

传递给 GetFileSizeEx 的句柄必须是文件句柄。您将它传递给文件映射 的句柄,这是完全不同的事情,因此它不会起作用。

显然您需要文件映射的大小(称为节对象),而且我认为 Win32 API 不提供此功能,因此您需要使用名为NtQuerySection .这是它可能如何工作的想法(我还没有尝试过):

typedef enum _SECTION_INFORMATION_CLASS
{
SectionBasicInformation,
SectionImageInformation
} SECTION_INFORMATION_CLASS;

typedef struct _SECTION_BASIC_INFORMATION {
PVOID Base;
ULONG Attributes;
LARGE_INTEGER Size;
} SECTION_BASIC_INFORMATION;

typedef DWORD (WINAPI* NTQUERYSECTION)
(HANDLE, SECTION_INFORMATION_CLASS, PVOID, ULONG, PULONG);
NTQUERYSECTION NtQuerySection =
(NTQUERYSECTION)GetProcAddress(LoadLibrary("ntdll.dll"), "NtQuerySection");

SECTION_BASIC_INFORMATION SectionInfo = { 0 };
NTSTATUS = NtQuerySection(handle, SectionBasicInformation, &SectionInfo,
sizeof(SectionInfo), 0);

关于c - GetFileSizeEx 文件映射失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com