GetShortField 関数 (wdbgexts.h)
GetShortField 関数は、そのサイズが 8 バイト以下の場合に構造体内のメンバーの値を読み取るか、後で読み取ることができるように構造体を初期化します。 この関数は、直接使用することを意図したものではありません。 代わりに、InitTypeRead または InitTypeReadPhysical と ReadField を使用する必要があります。
構文
ULONG64 GetShortField(
[in] IN ULONG64 TypeAddress,
[in] IN LPCSTR Name,
[in] IN USHORT StoreAddress
);
パラメーター
[in] TypeAddress
このパラメーターの意味は 、StoreAddress の値によって異なります。
StoreAddress が 0 以外の場合:
ターゲットのメモリ内の構造体のアドレスを指定します。 このアドレスは、 StoreAddress が 0 の場合に後続の呼び出しに使用されます。
StoreAddress が 0 の場合:
TypeAddress は無視されます。 StoreAddress が 0 以外の場合の最後の呼び出しからの TypeAddress の値は、ターゲットのメモリ内の構造体のアドレスを指定するために使用されます。
[in] Name
このパラメーターの意味は 、StoreAddress の値によって異なります。
StoreAddress が 0 以外の場合:
TypeAddress で構造体の型の名前を指定します。
StoreAddress が 0 の場合:
読み取る構造体のメンバーの名前を指定します。 構造体のアドレスと型は、 StoreAddress が 0 に等しくないこの関数の以前の呼び出しから記憶されます。 サブメンバーは、ピリオド区切りのパス ("myfield.mysubfield" など) を使用して指定できます。
[in] StoreAddress
この関数のモードを指定します。
StoreAddress が 0 以外の場合:
この関数は、メンバーを読み取るための構造体を初期化します。 構造体のアドレスと型名が記憶されます。
0x2ビット値が StoreAddress で設定されている場合、アドレス TypeAddress は物理アドレスと見なされます。それ以外の場合は、仮想アドレスと見なされます。
StoreAddress が 0 の場合:
この関数は、以前に初期化された構造体からメンバーを読み取ります。
戻り値
リターン コード | 説明 |
---|---|
|
関数が成功すると、値 0 が返されます。 呼び出し元が TypeAddress として 0 の値を渡したために関数が失敗した場合は、MEMORY_READ_ERROR値 (Wdbgexts.h で定義) が返されます。 その他の理由で関数が失敗した場合は、 IG_DUMP_SYMBOL_INFOエラー コードが返されます。 |
|
関数が成功すると、以前に初期化された構造体の指定されたフィールドの値が返されます。 構造体は、 GetShortField の以前の呼び出しで初期化された構造体です。 フィールドは、GetShortField の現在の呼び出しの Name パラメーターで指定されたフィールドです。 戻り値はULONG64にキャストされます。 関数が失敗すると、値 0 が返されます。 |
注釈
GetShortField が 0 以外の StoreAddress 値で呼び出されると、TypeAddress で指定されたアドレスにある構造体が初期化されます。 一度に初期化できる構造体は 1 つだけです。 GetShortField が 0 以外の StoreAddress 値で複数回呼び出された場合、最新の呼び出しで指定された構造体のみが初期化されます。 GetShortField が 0 の StoreAddress で呼び出されると、最後に初期化された構造体にアクセスし、Name で指定されたフィールドをその構造体で読み取り、そのフィールドの値を返します。
この関数を直接呼び出す必要はありません。 マクロ InitTypeRead と InitTypeReadPhysical は、メンバーを読み取るための構造体を準備するために、StoreAddress を 0 以外で使用してこの関数を呼び出します。 マクロ ReadField は、StoreAddress (および TypeAddress) が 0 に等しいこの関数を呼び出して、構造体からメンバーを読み取ります。
#define ReadField(Field) \
GetShortField(0, #Field, 0)
#define ReadFieldStr(FieldStr) \
GetShortField(0, FieldStr, 0)
パラメーター
FieldFieldStr戻り値
このマクロが成功すると、以前に初期化された構造体の指定されたフィールドの値が返されます。 構造体は、InitTypeRead、InitTypeStrRead、InitTypeReadPhysical、InitTypeStrReadPhysical、または GetShortField の以前の呼び出しで初期化された構造体です。 フィールドは、ReadField の Field または FieldStr パラメーターで指定されたフィールドです。 戻り値はULONG64にキャストされます。 関数が失敗すると、値 0 が返されます。パラメーター Field はメンバーの名前です。 ReadField の場合、C プリプロセッサは パラメーターを文字列に変換します。 ReadFieldStr の場合、Field は既に ASCII 文字列であることが想定されています。 たとえば、次の 2 つのコマンドは同一であり、以前に初期化された構造体から同じメンバーを読み取ります。
- ReadField( myField );
- ReadFieldStr( "myField" );
サブメンバーは、ピリオド区切りのパス ("myField.mySubfield" など) を使用して読み取ることができます。
InitTypeRead マクロは、ReadField を使用してそのメンバーを読み取ることができるように構造体を初期化します。
#define InitTypeRead(
Addr,
Type
);
パラメーター
Addr
ターゲットの仮想メモリ内の構造体のアドレスを指定します。
Type
構造体の型の名前を指定します。 C プリプロセッサは Type を 文字列に変換します。
値を返す
このマクロが成功すると、値 0 が返されます。 呼び出し元が Addr として 0 の値を渡したために失敗した場合は、MEMORY_READ_ERROR (Wdbgexts.h で定義) の値を返します。 それ以外の理由で失敗した場合は、 IG_DUMP_SYMBOL_INFOエラー コードが返されます。
InitTypeReadPhysical マクロと InitTypeStrReadPhysical マクロは、ReadField を使用してそのメンバーを読み取ることができるように、物理メモリ内の構造体を初期化します。
#define InitTypeReadPhysical(
Addr,
Type,
TypeStr
);
パラメーター
Addr
ターゲットの物理メモリ内の構造体のアドレスを指定します。
Type
構造体の型の名前を指定します。 C プリプロセッサは Type を 文字列に変換します。
TypeStr
構造体の型の名前を指定します。 TypeStr は ASCII 文字列である必要があります。
値を返す
このマクロが成功すると、値 0 が返されます。 呼び出し元が Addr として 0 の値を渡したために失敗した場合は、MEMORY_READ_ERROR (Wdbgexts.h で定義) の値を返します。 それ以外の理由で失敗した場合は、 IG_DUMP_SYMBOL_INFOエラー コードが返されます。
InitTypeRead マクロは、ReadField を使用してそのメンバーを読み取ることができるように構造体を初期化します。
#define InitTypeRead(
Addr,
TypeStr
);
パラメーター
Addr
ターゲットの仮想メモリ内の構造体のアドレスを指定します。
Type
構造体の型の名前を指定します。 TypeStr は ASCII 文字列である必要があります。
値を返す
このマクロが成功すると、値 0 が返されます。 呼び出し元が Addr として 0 の値を渡したために失敗した場合は、(Wdbgexts.h で定義されている) MEMORY_READ_ERROR値を返します。 それ以外の理由で失敗した場合は、 IG_DUMP_SYMBOL_INFOエラー コードが返されます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | wdbgexts.h (Wdbgexts.h、Dbgeng.h を含む) |