What does HRESULT 0x80041701 (FILTER_E_NO_MORE_TEXT) mean?

 
Previous Next
FILTER_E_END_OF_CHUNKS FILTER_E_NO_MORE_VALUES

FILTER_E_NO_MORE_TEXT

All text in the current chunk has been returned

FILTER_E_NO_MORE_TEXT is HRESULT 0x80041701 (-2147215615 signed; 2147751681 unsigned). Its severity bit is 1, facility is 4 (FACILITY_ITF for these values), and code field is 0x1701. Its failure-severity encoding is a terminal condition for text in the current chunk; the caller advances with GetChunk. AllStat describes the value as “No more text available in chunk.”

Contract boundary

FILTER_E_NO_MORE_TEXT belongs to continuing IFilter::GetText for a text-bearing chunk. The decisive interpretation is that the current chunk remains valid, but its text stream is exhausted until GetChunk advances. For FILTER_E_NO_MORE_TEXT, keep the symbolic constant and method stage together in logs; its hexadecimal value alone cannot identify the owning transition or input.

For FILTER_E_NO_MORE_TEXT, the IFilter contract is stateful: GetChunk selects a chunk, then GetText or GetValue consumes content according to STAT_CHUNK flags. In the FILTER_E_NO_MORE_TEXT investigation, method order and filter-instance ownership are therefore part of the evidence. This context narrows the responsible component without replacing the code-specific checks below.

Ways this state occurs

  • The consumer requests another buffer after the last characters; preserve the observation under the FILTER_E_NO_MORE_TEXT correlation record.
  • The chunk contains zero additional characters after a previous partial read; preserve the observation under the FILTER_E_NO_MORE_TEXT correlation record.
  • State is reused without calling GetChunk; preserve the observation under the FILTER_E_NO_MORE_TEXT correlation record.

The useful hypothesis for FILTER_E_NO_MORE_TEXT must explain both continuing IFilter::GetText for a text-bearing chunk and the documented condition. Compare the failing case with a control that preserves chunk id and CHUNK_TEXT flag and changes only characters returned by every GetText call; this prevents unrelated environment differences from dominating the FILTER_E_NO_MORE_TEXT test.

Telemetry fields

  • The FILTER_E_NO_MORE_TEXT investigation should record chunk id and CHUNK_TEXT flag.
  • The FILTER_E_NO_MORE_TEXT investigation should record characters returned by every GetText call.
  • The FILTER_E_NO_MORE_TEXT investigation should record input and output buffer lengths.
  • The FILTER_E_NO_MORE_TEXT investigation should record next method called by the consumer.

For FILTER_E_NO_MORE_TEXT, capture chunk id and CHUNK_TEXT flag before releasing objects, closing handles or reconnecting. Retain the raw HRESULT with characters returned by every GetText call, component version, UTC timestamp and correlation ID. Bound the FILTER_E_NO_MORE_TEXT telemetry to diagnostic metadata because document content, credentials and unrestricted query text may be sensitive.

Verification sequence

  1. Check that the active chunk advertises text. Associate this observation specifically with FILTER_E_NO_MORE_TEXT.
  2. Sum returned character counts and compare them with the caller loop. Associate this observation specifically with FILTER_E_NO_MORE_TEXT.
  3. Ensure the next operation is GetChunk rather than another unconditional GetText. Associate this observation specifically with FILTER_E_NO_MORE_TEXT.
  4. Test repeated GetText calls for the documented stable terminal response. Associate this observation specifically with FILTER_E_NO_MORE_TEXT.

Change one variable per FILTER_E_NO_MORE_TEXT control run. Preserve the component version and target identity, then alter only the condition described as the current chunk remains valid, but its text stream is exhausted until GetChunk advances. This isolates whether FILTER_E_NO_MORE_TEXT is causal rather than merely repeatable.

Safe continuation

Advance with GetChunk. Enlarging the buffer or retrying GetText cannot create more text in the same chunk. For FILTER_E_NO_MORE_TEXT, record whether continuing IFilter::GetText for a text-bearing chunk produced any content, update or state transition before returning. If completion remains unknown, the FILTER_E_NO_MORE_TEXT path must not replay non-idempotent work until the owner confirms final state.

The retry gate for FILTER_E_NO_MORE_TEXT should be a concrete change in chunk id and CHUNK_TEXT flag or characters returned by every GetText call. A timer alone cannot demonstrate that the FILTER_E_NO_MORE_TEXT contract condition has changed.

Limits of the HRESULT

It does not mean the document has no more chunks or that value chunks are unavailable. Without the call boundary for continuing IFilter::GetText for a text-bearing chunk, FILTER_E_NO_MORE_TEXT also cannot identify which wrapper or configuration layer introduced the condition.

Distinguishing related codes

FILTER_E_NO_TEXT means the current chunk is not a text chunk; FILTER_E_NO_MORE_TEXT means a text chunk was drained. In FILTER_E_NO_MORE_TEXT telemetry, preserve neighboring constants separately because the same visible symptom may require a different caller action, owner or recovery gate.

Developer and administrator actions

  • At step 1 for FILTER_E_NO_MORE_TEXT, at the code boundary, keep chunk id and CHUNK_TEXT flag beside the returned HRESULT
  • At step 2 for FILTER_E_NO_MORE_TEXT, in telemetry, correlate characters returned by every GetText call with the target and component generation
  • At step 3 for FILTER_E_NO_MORE_TEXT, for regression coverage, force the documented condition: the current chunk remains valid, but its text stream is exhausted until GetChunk advances
  • At step 4 for FILTER_E_NO_MORE_TEXT, for operations staff, expose the corrective state change rather than a generic retry button
  • At step 5 for FILTER_E_NO_MORE_TEXT, after remediation, validate one known-good control and the original failing case

Practical case

A client reads a long paragraph in several 4 KB buffers. The final read is followed by this result, so it advances to the next chunk. In this scenario, handling FILTER_E_NO_MORE_TEXT at its real contract boundary prevents the application from collapsing a precise state into an unhelpful generic “search failed” message.

Official Microsoft references


Looking for a different code? Search another status or error code.