【发布时间】:2015-11-10 05:36:35
【问题描述】:
我完成了 Windows 系统编程中的练习,但我并没有完全理解 LARGE_INTEGER 和 OVERLAPPED 结构。例如,我在 main.xml 中定义了以下结构。第一个结构用于跟踪记录的数量。第二个用于记录数据。作者定义并使用两个重叠结构来跟踪记录文件的偏移量。
typedef struct _HEADER {
DWORD numRecords;
DWORD numNonEmptyRecords;
} HEADER; /* 8bytes */
typedef struct _RECORD {
DWORD referenceCount;
SYSTEMTIME recordCreationTime;
SYSTEMTIME recordLastRefernceTime;
SYSTEMTIME recordUpdateTime;
TCHAR dataString[STRING_SIZE];
} RECORD; /* 308bytes */
LARGE_INTEGER currentPtr;
OVERLAPPED ov = {0, 0, 0, 0, NULL}, ovZero = {0, 0, 0, 0, NULL};
创建记录后。可以提示用户读取、写入或删除记录。用户输入的记录保存在recNo中。
currentPtr.QuadPart = (LONGLONG)recNo * sizeof(RECORD) + sizeof(HEADER);
ov.Offset = currentPtr.LowPart;
ov.OffsetHigh = currentPtr.HighPart;
谁能解释一下 LARGE_INTEGR currentPtr 的值是如何计算的? 什么是联合?我查看了 windbg 中的示例,但我不明白 currentPtr.LowPart 和 currentPtr.HighPart 是如何计算的。下面是使用 OVERLAPPED 结构调用文件读取操作的示例。
ReadFile (hFile, &record, sizeof (RECORD), &nXfer, &ov)
【问题讨论】:
标签: c windows debugging winapi windbg