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을 반환합니다. 호출자가 0 값을 TypeAddress로 전달했기 때문에 함수가 실패하면 MEMORY_READ_ERROR 값을 반환합니다(Wdbgexts.h에 정의됨). 다른 이유로 인해 함수가 실패하면 IG_DUMP_SYMBOL_INFO 오류 코드가 반환됩니다.
StoreAddress가 0인 경우:
함수가 성공하면 이전에 초기화된 구조체에서 지정된 필드의 값을 반환합니다. 구조체는 GetShortField에 대한 이전 호출에서 초기화된 구조체입니다. 필드는 GetShortField에 대한 현재 호출의 Name 매개 변수로 지정된 필드입니다. 반환 값은 ULONG64 캐스팅됩니다. 함수가 실패하면 값 0을 반환합니다.

설명

GetShortField가 0이 아닌 StoreAddress 값으로 호출되면 TypeAddress에서 지정한 주소에 있는 구조를 초기화합니다. 한 번에 하나의 구조만 초기화할 수 있습니다. GetShortField가 0이 아닌 StoreAddress 값으로 두 번 이상 호출되는 경우 가장 최근 호출에 지정된 구조만 초기화됩니다. StoreAddress가 0인 GetShortField가 호출되면 가장 최근에 초기화된 구조체에 액세스하고, 해당 구조체에서 Name으로 지정된 필드를 읽고, 해당 필드의 값을 반환합니다.

이 함수는 직접 호출할 필요가 없습니다. InitTypeReadInitTypeReadPhysical 매크로는 0이 아닌 StoreAddress를 사용하여 이 함수를 호출하여 멤버를 읽기 위한 구조를 준비합니다. 매크로 ReadField 는 구조체에서 멤버를 읽기 위해 StoreAddress (및 TypeAddress)가 0과 같은 이 함수를 호출합니다.

이 함수는 정적 지역 변수를 사용하여 TypeAddressName을 저장하고 이 함수가 WdbgExts.h에 정의되어 있기 때문에 C 사전 프로세서는 각 DLL에 대해 이 함수의 새 instance 만들고 TypeAddressName은 단일 소스 파일 내에서만 사용할 수 있습니다. 즉, 멤버를 읽는 것과 동일한 원본 파일에서 구조를 초기화해야 합니다.
 
ReadFieldReadFieldStr 매크로는 InitTypeRead 또는 InitTypeReadPhysical로 초기화된 구조체에서 크기가 8바이트 미만인 필드를 읽습니다.
#define ReadField(Field) \
    GetShortField(0, #Field, 0)

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

매개 변수

FieldStr

반환 값

이 매크로가 성공하면 이전에 초기화된 구조체에서 지정된 필드의 값을 반환합니다. 구조체는 InitTypeRead, InitTypeStrRead, InitTypeReadPhysical, InitTypeStrReadPhysical 또는 GetShortField에 대한 이전 호출에서 초기화된 구조체입니다. 필드는 ReadFieldField 또는 FieldStr 매개 변수로 지정된 필드입니다. 반환 값은 ULONG64 캐스팅됩니다. 함수가 실패하면 값 0을 반환합니다.

매개 변수 필드는 멤버의 이름입니다. ReadField의 경우 C 사전 프로세서는 매개 변수를 문자열로 바꿉니다. ReadFieldStr의 경우 필드는 이미 ASCII 문자열이어야 합니다. 예를 들어 다음 두 명령은 동일하며 이전에 초기화된 구조에서 동일한 멤버를 읽습니다.

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

하위 사용자는 마침표로 구분된 경로(예: "myField.mySubfield")를 사용하여 읽을 수 있습니다.

참고 이러한 매크로는 GetShortField 함수를 사용하므로 읽기 위해 구조를 초기화하는 매크로와 동일한 소스 코드 파일에서 호출해야 합니다. 자세한 내용은 GetShortField를 참조하세요.
 
WdbgExts 확장을 작성하는 경우 wdbgexts.h를 포함합니다. 이 함수를 호출하는 DbgEng 확장을 작성하는 경우 dbgeng.h 앞에 wdbgexts.h를 포함합니다(자세한 내용은 DbgEng 확장 코드 작성 참조).

InitTypeRead 매크로는 ReadField를 사용하여 멤버를 읽을 수 있도록 구조를 초기화합니다.

#define InitTypeRead(
    Addr,
    Type
);

매개 변수

Addr

대상의 가상 메모리에 있는 구조체의 주소를 지정합니다.

형식

구조체 형식의 이름을 지정합니다. C 사전 프로세서는 Type 을 문자열로 바꿉니다.

값 반환

이 매크로가 성공하면 값 0을 반환합니다. 호출자가 0 값을 Addr로 전달했기 때문에 실패하면 MEMORY_READ_ERROR 값을 반환합니다(Wdbgexts.h에 정의됨). 다른 이유로 실패하면 IG_DUMP_SYMBOL_INFO 오류 코드가 반환됩니다.

InitTypeReadPhysicalInitTypeStrReadPhysical 매크로는 ReadField를 사용하여 멤버를 읽을 수 있도록 실제 메모리의 구조를 초기화합니다.

#define InitTypeReadPhysical(
    Addr,
    Type,
    TypeStr
);

매개 변수

Addr

대상의 실제 메모리에 있는 구조체의 주소를 지정합니다.

형식

구조체 형식의 이름을 지정합니다. C 사전 프로세서는 Type 을 문자열로 바꿉니다.

TypeStr

구조체 형식의 이름을 지정합니다. TypeStr 은 ASCII 문자열이어야 합니다.

값 반환

이 매크로가 성공하면 값 0을 반환합니다. 호출자가 0 값을 Addr로 전달했기 때문에 실패하면 MEMORY_READ_ERROR 값을 반환합니다(Wdbgexts.h에 정의됨). 다른 이유로 실패하면 IG_DUMP_SYMBOL_INFO 오류 코드가 반환됩니다.

InitTypeRead 매크로는 ReadField를 사용하여 멤버를 읽을 수 있도록 구조를 초기화합니다.

#define InitTypeRead(
    Addr,
    TypeStr
);

매개 변수

Addr

대상의 가상 메모리에 있는 구조체의 주소를 지정합니다.

형식

구조체 형식의 이름을 지정합니다. TypeStr 은 ASCII 문자열이어야 합니다.

값 반환

이 매크로가 성공하면 값 0을 반환합니다. 호출자가 0 값을 Addr로 전달하여 실패하면 MEMORY_READ_ERROR 값을 반환합니다(Wdbgexts.h에 정의됨). 다른 이유로 실패하면 IG_DUMP_SYMBOL_INFO 오류 코드가 반환됩니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 wdbgexts.h(Wdbgexts.h, Dbgeng.h 포함)

추가 정보

InitTypeRead

InitTypeReadPhysical

ReadField