次の方法で共有


GetShortField 関数 (wdbgexts.h)

GetShortField 関数は、そのサイズが 8 バイト以下の場合に構造体内のメンバーの値を読み取るか、後で読み取ることができるように構造体を初期化します。 この関数は、直接使用することを意図したものではありません。 代わりに、InitTypeRead または InitTypeReadPhysicalReadField を使用する必要があります。

構文

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 の場合:

この関数は、以前に初期化された構造体からメンバーを読み取ります。

戻り値

リターン コード 説明
StoreAddress が 0 以外の場合:
関数が成功すると、値 0 が返されます。 呼び出し元が TypeAddress として 0 の値を渡したために関数が失敗した場合は、MEMORY_READ_ERROR値 (Wdbgexts.h で定義) が返されます。 その他の理由で関数が失敗した場合は、 IG_DUMP_SYMBOL_INFOエラー コードが返されます。
StoreAddress が 0 の場合:
関数が成功すると、以前に初期化された構造体の指定されたフィールドの値が返されます。 構造体は、 GetShortField の以前の呼び出しで初期化された構造体です。 フィールドは、GetShortField の現在の呼び出しの Name パラメーターで指定されたフィールドです。 戻り値はULONG64にキャストされます。 関数が失敗すると、値 0 が返されます。

注釈

GetShortField が 0 以外の StoreAddress 値で呼び出されると、TypeAddress で指定されたアドレスにある構造体が初期化されます。 一度に初期化できる構造体は 1 つだけです。 GetShortField が 0 以外の StoreAddress 値で複数回呼び出された場合、最新の呼び出しで指定された構造体のみが初期化されます。 GetShortField が 0 の StoreAddress で呼び出されると、最後に初期化された構造体にアクセスし、Name で指定されたフィールドをその構造体で読み取り、そのフィールドの値を返します。

この関数を直接呼び出す必要はありません。 マクロ InitTypeReadInitTypeReadPhysical は、メンバーを読み取るための構造体を準備するために、StoreAddress を 0 以外で使用してこの関数を呼び出します。 マクロ ReadField は、StoreAddress (および TypeAddress) が 0 に等しいこの関数を呼び出して、構造体からメンバーを読み取ります。

この関数は静的ローカル変数を使用して TypeAddressName を格納し、この関数は WdbgExts.h で定義されているため、C プリプロセッサは DLL ごとにこの関数の新しいインスタンスを作成し、TypeAddressName は 1 つのソース ファイル内でのみ使用できるために注意してください。 つまり、構造体は、メンバーの読み取り元と同じソース ファイルで初期化する必要があります。
 
ReadField マクロと ReadFieldStr マクロは、InitTypeRead または InitTypeReadPhysical で初期化された構造体から、サイズが 8 バイト未満のフィールドを読み取ります。
#define ReadField(Field) \
    GetShortField(0, #Field, 0)

#define ReadFieldStr(FieldStr) \
    GetShortField(0, FieldStr, 0)

パラメーター

FieldFieldStr

戻り値

このマクロが成功すると、以前に初期化された構造体の指定されたフィールドの値が返されます。 構造体は、InitTypeRead、InitTypeStrReadInitTypeReadPhysical、InitTypeStrReadPhysical、または GetShortField の以前の呼び出し初期化された構造体です。 フィールドは、ReadFieldField または FieldStr パラメーターで指定されたフィールドです。 戻り値はULONG64にキャストされます。 関数が失敗すると、値 0 が返されます。

パラメーター Field はメンバーの名前です。 ReadField の場合、C プリプロセッサは パラメーターを文字列に変換します。 ReadFieldStr の場合、Field は既に ASCII 文字列であることが想定されています。 たとえば、次の 2 つのコマンドは同一であり、以前に初期化された構造体から同じメンバーを読み取ります。

  • ReadField( myField );
  • ReadFieldStr( "myField" );

サブメンバーは、ピリオド区切りのパス ("myField.mySubfield" など) を使用して読み取ることができます。

メモ これらのマクロは GetShortField 関数を使用するため、読み取り用に構造体を初期化するマクロと同じソース コード ファイルから呼び出す必要があります。 詳細については、「 GetShortField」を参照してください。
 
WdbgExts 拡張機能を作成する場合は、 wdbgexts.h を含めます。 この関数を呼び出す DbgEng 拡張機能を記述する場合は、dbgeng.h の前に wdbgexts.h を含めます (詳細については、「DbgEng 拡張機能コードの記述」を参照してください)。

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 を含む)

こちらもご覧ください

InitTypeRead

InitTypeReadPhysical

ReadField