다음을 통해 공유


ReadLogRecord 함수(clfsw32.h)

세 가지 모드 중 하나에서 지정된 LSN(로그 시퀀스 번호)에서 읽기 시퀀스를 시작하고 지정된 로그 레코드의 첫 번째 및 읽기 컨텍스트를 반환합니다. 클라이언트는 ReadNextLogRecord에 읽기 컨텍스트를 전달하여 지정된 모드에서 후속 레코드를 읽을 수 있습니다.

구문

CLFSUSER_API BOOL ReadLogRecord(
  [in]                PVOID             pvMarshal,
  [in]                PCLFS_LSN         plsnFirst,
  [in]                CLFS_CONTEXT_MODE eContextMode,
  [out]               PVOID             *ppvReadBuffer,
  [out]               PULONG            pcbReadBuffer,
  [out]               PCLFS_RECORD_TYPE peRecordType,
  [out]               PCLFS_LSN         plsnUndoNext,
  [out]               PCLFS_LSN         plsnPrevious,
  [out]               PVOID             *ppvReadContext,
  [in, out, optional] LPOVERLAPPED      pOverlapped
);

매개 변수

[in] pvMarshal

CreateLogMarshallingArea 함수를 사용하여 할당된 마샬링 컨텍스트에 대한 포인터입니다.

[in] plsnFirst

읽기 작업을 시작해야 하는 레코드의 LSN(로그 시퀀스 번호)을 지정하는 CLFS_LSN 구조체에 대한 포인터입니다.

이 값은 로그의 활성 범위에 있는 유효한 레코드의 LSN이어야 합니다.

[in] eContextMode

*ppvReadContext에서 반환되는 읽기 컨텍스트에 대한 모드입니다.

다음 표에서는 세 가지 상호 배타적 읽기 모드를 식별합니다.

의미
ClfsContextPrevious
plsnPrevious로 연결된 레코드를 읽습니다.
ClfsContextUndoNext
plsnUndoNext로 연결된 레코드 체인을 읽습니다.
ClfsContextForward
읽기 컨텍스트에서 현재 LSN 바로 뒤에 있는 LSN을 사용하여 레코드를 읽습니다.

[out] ppvReadBuffer

로그 I/O 블록의 대상 레코드에 대한 포인터를 수신하는 변수에 대한 포인터입니다.

[out] pcbReadBuffer

*ppvReadBuffer(바이트)로 반환되는 데이터의 크기를 수신하는 변수에 대한 포인터입니다.

[out] peRecordType

레코드 읽기 형식을 수신하는 변수에 대한 포인터입니다.

이 매개 변수는 CLFS_RECORD_TYPE 상수 중 하나입니다.

[out] plsnUndoNext

실행 취소 레코드 체인에서 다음 레코드의 LSN을 수신하는 CLFS_LSN 구조체에 대한 포인터입니다.

[out] plsnPrevious

이전 레코드 체인에서 다음 레코드의 LSN을 수신하는 CLFS_LSN 구조체에 대한 포인터입니다.

[out] ppvReadContext

읽기에 성공하면 시스템이 할당한 읽기 컨텍스트에 대한 포인터를 수신하는 변수에 대한 포인터입니다.

함수가 작업 완료를 지연하는 경우 유효한 읽기 컨텍스트 포인터와 ERROR_IO_PENDING 오류 상태 반환합니다. 다른 모든 오류에서 읽기 컨텍스트 포인터는 NULL입니다. 함수의 지연된 완료를 처리하는 방법에 대한 자세한 내용은 이 항목의 설명 섹션을 참조하세요.

요청된 모든 로그 레코드를 가져온 후 클라이언트는 연결된 메모리를 해제하려면 읽기 컨텍스트를 TerminateReadLog 에 전달해야 합니다. 이렇게 하지 않으면 메모리가 누출됩니다.

참고 CLFS(일반 로그 파일 시스템) 읽기 컨텍스트는 스레드로부터 안전하지 않습니다. 한 번에 둘 이상의 스레드에서 사용하거나 한 번에 둘 이상의 비동기 읽기로 전달해서는 안 됩니다.
 

[in, out, optional] pOverlapped

비동기 작업에 필요한 OVERLAPPED 구조체에 대한 포인터입니다.

비동기 작업이 사용되지 않는 경우 이 매개 변수는 NULL 일 수 있습니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

다음 목록에서는 가능한 오류 코드를 식별합니다.

설명

CreateLogMarshallingArea에서 지정한 로그 블록 크기가 전체 로그 블록을 보유할 만큼 크지 않으면 ERROR_LOG_BLOCK_INCOMPLETE 오류 메시지가 반환됩니다.

ReadLogRecord가 유효한 pOverlapped 구조체로 호출되고 로그 핸들이 겹치는 옵션을 사용하여 만들어진 경우 이 함수에 대한 호출이 오류 코드 ERROR_IO_PENDING 실패하면 ppvReadContext 매개 변수가 가리키는 변수에 유효한 읽기 컨텍스트에 대한 포인터가 배치됩니다.

CreateLogMarshallingArea에 대한 이전 호출에 지정된 숫자 버퍼보다 더 많은 읽기 컨텍스트를 열려고 하면 ERROR_LOG_BLOCK_EXHAUSTED 반환됩니다.

로그 레코드 복사본을 완료하려면 클라이언트는 먼저 GetOverlappedResult 또는 동기화 대기 함수 중 하나를 사용하여 겹치는 I/O 작업의 지연된 완료와 실행을 동기화해야 합니다. 자세한 내용은 동기화 및 겹치는 입력 및 출력을 참조하세요.

ReadLogRecord가 비동기적으로 완료되면 요청된 레코드는 디스크에서 읽지만 *ppvReadBuffer의 포인터로 확인되지 않습니다.

요청된 읽기를 완료하고 로그 레코드에 대한 유효한 포인터를 가져오려면 클라이언트가 ReadLogRecord가 반환하는 읽기 컨텍스트 포인터를 전달하는 ReadNextLogRecord를 호출해야 합니다.

참고 CLFS(일반 로그 파일 시스템) 읽기 컨텍스트는 스레드로부터 안전하지 않습니다. 한 번에 둘 이상의 스레드에서 사용해서는 안 됩니다.

CLFS 읽기 컨텍스트는 한 번에 둘 이상의 비동기 읽기로 전달되어서는 안 되며 ERROR_BUSY 함수가 실패합니다.

 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 R2 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 clfsw32.h
라이브러리 Clfsw32.lib
DLL Clfsw32.dll

추가 정보

CLFS_CONTEXT_MODE

CLFS_LSN

CLFS_RECORD_TYPE

일반적인 로그 파일 시스템 함수

CreateLogMarshallingArea

OVERLAPPED

ReadNextLogRecord

TerminateReadLog