MSDN ブログの記事を読んだ後に疑問が生じます。. この記事では、 aFILETIME
を anにキャストすると、位置合わせされていない__int64
ポインターが作成される可能性があると述べています。
FILETIME
、LUID
、およびLUID_AND_ATTRIBUTES
structs は、次のように Windows ヘッダーで宣言されています。
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
}
typedef struct LUID {
ULONG LowPart;
LONG HighPart;
}
typedef struct LUID_AND_ATTRIBUTES {
LUID Luid;
DWORD Attributes;
}
FILETIME
とLUID
structs は同様のレイアウトを持っているため、 a も として扱うと、LUID
位置合わせされていない__int64
ポインターが作成される可能性があります。ただし、Windows.pas
(ここでは Delphi XE3) これを実践しています。たとえば、次のようになります。
{$ALIGN 4}
LUID_AND_ATTRIBUTES = record
Luid : Int64; // Here, LUID is treated as Int64
Attributes: DWORD;
end;
{$ALIGN ON}
別の例は
function LookupPrivilegeValue(lpSystemName, lpName: LPCWSTR;
var lpLuid: Int64): BOOL; stdcall; // LUID is treated as Int64
/の ようにFILETIME
、またはLUID
直接構造体を安全に扱う方法は? キーは何ですか?UInt64
Int64