ClfsReserveAndAppendLogAligned 함수(wdm.h)
ClfsReserveAndAppendLogAligned 루틴은 마샬링 영역에 공간을 예약하거나 마샬링 영역에 레코드를 추가하거나 둘 다 원자적으로 수행합니다. 레코드의 데이터는 지정된 경계에 맞춰집니다.
구문
CLFSUSER_API NTSTATUS ClfsReserveAndAppendLogAligned(
[in] PVOID pvMarshalContext,
[in, optional] PCLFS_WRITE_ENTRY rgWriteEntries,
[in] ULONG cWriteEntries,
[in] ULONG cbEntryAlignment,
[in, optional] PCLFS_LSN plsnUndoNext,
[in, optional] PCLFS_LSN plsnPrevious,
[in] ULONG cReserveRecords,
[in, out] PLONGLONG rgcbReservation,
[in] ULONG fFlags,
[out, optional] PCLFS_LSN plsn
);
매개 변수
[in] pvMarshalContext
CLFS 스트림과 연결된 마샬링 영역을 나타내는 불투명 컨텍스트에 대한 포인터입니다. 호출자는 이전에 ClfsCreateMarshallingArea를 호출하여 이 포인터를 얻었습니다.
[in, optional] rgWriteEntries
각각 로그에 추가되는 레코드의 일부가 될 데이터 버퍼에 대한 포인터를 보유하는 CLFS_WRITE_ENTRY 구조의 배열에 대한 포인터입니다. cWriteEntries가 0인 경우 이 매개 변수는 NULL일 수 있습니다.
[in] cWriteEntries
rgWriteEntries가 가리키는 배열의 요소 수입니다. rgWriteEntries가 NULL인 경우 이 매개 변수는 0이어야 합니다.
[in] cbEntryAlignment
rgWriteEntries가 단일 레코드로 마샬링할 때 가리키는 데이터 항목의 바이트 맞춤입니다. 값은 단순 연결을 지정합니다( ClfsReserveAndAppendLog 참조). 값이 1보다 크면 레코드의 항목 사이에 0이 배치될 수 있습니다. 이 매개 변수의 값은 0보다 커야 합니다.
[in, optional] plsnUndoNext
추가할 레코드의 실행 취소 후 LSN을 제공하는 CLFS_LSN 구조체에 대한 포인터입니다.
[in, optional] plsnPrevious
추가할 레코드의 이전 LSN을 제공하는 CLFS_LSN 구조체에 대한 포인터입니다.
[in] cReserveRecords
rgcbReservation이 가리키는 배열의 요소 수입니다. rgcbReservation이 NULL이거나 fFlags의 CLFS_FLAG_USE_RESERVATION 플래그가 설정된 경우 이 매개 변수는 0이어야 합니다.
[in, out] rgcbReservation
LONGLONG 형식 변수 배열에 대한 포인터입니다. 호출자는 배열의 각 요소를 공간 예약이 있어야 하는 레코드의 크기(바이트)로 설정합니다. 반환 시 각 배열 요소는 레코드에 예약된 공간의 실제 크기를 받습니다. 여기에는 헤더 및 맞춤에 필요한 공간이 포함됩니다. 예약 값이 음수이면 제공된 음수 값의 절대값과 거의 일치하는 예약 레코드가 해제됩니다. cReserveRecords가 0이고 fFlags의 CLFS_FLAG_USE_RESERVATION 플래그가 설정된 경우 NULL이어야 하는 경우 이 매개 변수는 NULL일 수 있습니다.
[in] fFlags
이 매개 변수는 다음 플래그의 조합일 수 있습니다.
플래그 | 의미 |
---|---|
CLFS_FLAG_FORCE_APPEND | 현재 레코드가 로그 I/O 블록에 추가된 후 블록은 안정적인 스토리지에 LSN 시퀀스로 큐에 대기됩니다. 이 플래그는 레코드가 안정적인 스토리지로 강제 적용된다는 보장을 제공하지 않습니다(CLFS_FLAG_FORCE_FLUSH 참조). |
CLFS_FLAG_FORCE_FLUSH | 현재 레코드가 로그 I/O 블록에 추가되면 블록은 안정적인 스토리지로 강제 적용됩니다. |
CLFS_FLAG_USE_RESERVATION | 현재 레코드는 I/O 블록의 예약된 공간에 배치됩니다. 마샬링 영역의 예약된 레코드 수가 1씩 줄어듭니다. 이 플래그가 설정된 경우 cReserveRecords는 0이어야 하고 rgcbReservation 은 NULL이어야 합니다. |
[out, optional] plsn
추가된 레코드의 LSN을 수신하는 CLFS_LSN 구조체에 대한 포인터입니다. cWriteEntries가 0인 경우 이 매개 변수는 NULL일 수 있습니다.
반환 값
ClfsReserveAndAppendLogAligned는 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 Ntstatus.h에 정의된 오류 코드 중 하나를 반환합니다.
설명
ClfsReserveAndAppendLogAligned 루틴은 선택적 매개 변수의 존재와 CLFS_USE_RESERVATION 플래그의 상태에 따라 기본 동작을 변경합니다. 다음 표에서는 일반적인 시나리오를 요약합니다.
매개 변수 및 플래그 값 | 수행된 작업 |
---|---|
cWriteEntries = 0.
rgWriteEntries = NULL입니다. plsn = NULL입니다. |
레코드 집합에 대한 공간을 예약하지만 마샬링 영역에 레코드를 추가하지는 않습니다. rgcbReservation 매개 변수는 예약된 공간이 필요한 각 레코드의 데이터 부분 크기를 제공합니다. |
cWriteEntries > 0입니다.
rgWriteEntries 가 NULL이 아닙니다. plsn 은 NULL이 아닙니다. cReserveRecords = 0. rgcbReservation 이 NULL입니다. CLFS_USE_RESERVATION 설정됩니다. |
이미 예약된 공간을 사용하여 마샬링 영역에 레코드를 추가합니다. 예약된 레코드 공간 수를 1씩 줄입니다. |
cWriteEntries > 0입니다.
rgWriteEntries 가 NULL이 아닙니다. plsn 은 NULL이 아닙니다. cReserveRecords = 0. rgcbReservation 이 NULL입니다. CLFS_USE_RESERVATION 지워집니다. |
새 공간을 예약하여 마샬링 영역에 레코드를 추가합니다. 예약된 레코드 공간의 수는 변경되지 않은 상태로 둡니다. |
cWriteEntries > 0입니다.
rgWriteEntries 가 NULL이 아닙니다. plsn 은 NULL이 아닙니다. cReserveRecords> 0. rgcbReservation 이 NULL이 아닙니다. CLFS_USE_RESERVATION 플래그가 지워집니다. |
새 공간을 예약하여 마샬링 영역에 레코드를 추가합니다. 또한 현재 추가되지 않은 레코드 집합에 대한 공간을 예약합니다. rgcbReservation 매개 변수는 예약된 공간이 필요한 각 레코드의 크기를 제공합니다. 예약된 레코드 공간 수를 cReserveRecords 값만큼 늘입니다. |
CLFS 개념 및 용어에 대한 설명은 공통 로그 파일 시스템을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Server 2003 R2, Windows Vista 및 이후 버전의 Windows에서 사용할 수 있습니다. |
대상 플랫폼 | 데스크톱 |
머리글 | wdm.h(Wdm.h 포함) |
라이브러리 | Clfs.lib |
DLL | Clfs.sys |
IRQL | <= APC_LEVEL |