| Previous | Next |
| FILTER_E_IN_USE | FILTER_E_NO_SUCH_PROPERTY |
FILTER_E_NOT_OPEN
No document is open in the filter instance
FILTER_E_NOT_OPEN is HRESULT 0x80041739 (-2147215559 signed; 2147751737 unsigned). Its severity bit is 1, facility is 4 (FACILITY_ITF for these values), and code field is 0x1739. Standard HRESULT severity rules classify the value as a failure. AllStat describes the value as “The document is not opened.”
Interpretation in context
This result belongs to requesting extraction or close behavior before the handler has successfully opened a source. The decisive interpretation is that the caller and filter disagree about lifecycle state. Keep the symbolic constant and method stage together in logs; its hexadecimal value alone cannot identify the owning transition or input.
The IFilter contract is stateful: GetChunk selects a chunk, then GetText or GetValue consumes content according to STAT_CHUNK flags. In the result 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.
Conditions to test
- This result: Initialization failed but later methods still execute.
- This result: Cleanup runs twice.
- This result: An instance was returned to a pool after close.
- It: One thread closes state another thread expects to use.
The useful hypothesis for it must explain both requesting extraction or close behavior before the handler has successfully opened a source and the documented condition. Compare the failing case with a control that preserves instance identity and lifecycle transitions and changes only result of the preceding open/init call; this prevents unrelated environment differences from dominating the result test.
Incident record
- check instance identity and lifecycle transitions.
- check result of the preceding open/init call.
- check method invoked after state loss.
- check thread and cancellation ownership.
Capture instance identity and lifecycle transitions before releasing objects, closing handles or reconnecting. Retain the raw HRESULT with result of the preceding open/init call, component version, UTC timestamp and correlation ID. Bound the result telemetry to diagnostic metadata because document content, credentials and unrestricted query text may be sensitive.
Step-by-step diagnosis
- Find the last successful state transition for this instance. Associate this observation specifically with it.
- Stop the pipeline immediately after a failed open. Associate this observation specifically with it.
- Make close idempotent at the wrapper layer. Associate this observation specifically with it.
- Prove that each task owns an independent filter object. Associate this observation specifically with it.
Change one variable per it control run. Preserve the component version and target identity, then alter only the condition described as the caller and filter disagree about lifecycle state. This isolates whether it is causal rather than merely repeatable.
Retry decision
Open and initialize a source successfully before extraction, or replace the invalid instance. Repeating the out-of-order method is not a retry. Record whether requesting extraction or close behavior before the handler has successfully opened a source produced any content, update or state transition before returning. If completion remains unknown, the path must not replay non-idempotent work until the owner confirms final state.
The retry gate for it should be a concrete change in instance identity and lifecycle transitions or result of the preceding open/init call. A timer alone cannot demonstrate that the result contract condition has changed.
What the value cannot establish
It does not mean the source path is missing or inaccessible; the call may never have reached the source. Without the call boundary for requesting extraction or close behavior before the handler has successfully opened a source, it also cannot identify which wrapper or configuration layer introduced the condition.
Adjacent contract states
FILTER_E_ALREADY_OPEN detects a second open; it detects use with no active object. In it 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 the code boundary, keep instance identity and lifecycle transitions beside the returned HRESULT; preserve the observation under the result correlation record.
- In telemetry, correlate result of the preceding open/init call with the target and component generation; preserve the observation under the result correlation record.
- For regression coverage, force the documented condition: the caller and filter disagree about lifecycle state; preserve the observation under the result correlation record.
- For operations staff, expose the corrective state change rather than a generic retry button; preserve the observation under the result correlation record.
- After remediation, validate one known-good control and the original failing case; preserve the observation under the result correlation record.
Concrete scenario
An error handler closes a filter and the normal completion path closes it again. State-machine assertions identify the double cleanup. In this scenario, handling it at its real contract boundary prevents the application from collapsing a precise state into an unhelpful generic “search failed” message.
Official Microsoft references
- Microsoft: Content-Indexing values — official contract information relevant to it.
- Microsoft: IFilter interface
- Microsoft: testing filter handlers
- Microsoft: filter handlers in Windows Search
- Microsoft: Filter-Interface values
Looking for a different code? Search another status or error code.
