| Previous | Next |
| hrDiskIO | hrRecordTooBig |
hrInvalidPath
Diagnostic focus
hrInvalidPath means a database, system, log, or temporary directory does not satisfy the path contract.
This result is the legacy Directory Service backup/restore HRESULT form of the ESE condition normally written as JET_errInvalidPath. Preserve the original value 0xC80003FF when a wrapper also exposes a signed JET_ERR.
The key comparison is: hrFileNotFound can follow a valid path; this code means the path argument or location is invalid for the API. The first useful observation is to log the expanded absolute path, current directory, service identity, existence, volume type, and trailing separator handling. This evidence separates malformed input from a valid name, path, or buffer that simply produced no result.
The ESE objects in play
| Diagnostic layer | API argument, naming, path, and buffer contracts |
|---|---|
| Typical API surface | the specific Jet* function named by the caller and its structure definitions in esent.h |
| Code-specific boundary | a database, system, log, or temporary directory does not satisfy the path contract |
| First corrective direction | canonicalize and validate the directory before engine initialization or attachment |
ESE distinguishes malformed input from a valid lookup that finds nothing. Many output APIs expose a required byte count, while fixed-width inputs must match a declared type exactly.
Evidence that resolves the ambiguity
A useful trace should preserve the first failing operation and the state of the API argument, naming, path, and buffer contracts.
- Code-specific observation: log the expanded absolute path, current directory, service identity, existence, volume type, and trailing separator handling.
- the unmodified argument value with its Unicode and byte lengths; associate it with this result rather than with a later generic exception.
- structure sizes, reserved fields, grbits, and API version.
- the documented required-size value for any output buffer.
Nearby results that mean something different
hrInvalidParameter | the function received a value or combination that violates its call contract |
|---|---|
hrBufferTooSmall | a caller-provided output area cannot hold the value ESE is returning |
hrInvalidName | an ESE object name failed the naming contract before object lookup could succeed |
A disciplined correction path
- Freeze the failing request context and record
0xC80003FF, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: log the expanded absolute path, current directory, service identity, existence, volume type, and trailing separator handling.
- Apply the targeted fix: canonicalize and validate the directory before engine initialization or attachment.
- Before retrying the operation, reconcile the exact argument bytes and the absence of unintended object creation.
- Repeat the smallest read-only or disposable test that exercises the corrected precondition; then confirm both the returned HRESULT and the resulting database, cursor, or file state.
Actions that can hide or worsen the problem
- Do not silently trim, recode, or sanitize the value into a different identifier.
- Do not grow a fixed-width input buffer as though it were a variable output.
Developer-facing acceptance test
Build a focused test that reproduces it at the API argument, naming, path, and buffer contracts layer. The corrected test should change only the decisive condition—a database, system, log, or temporary directory does not satisfy the path contract—and should prove that cleanup is safe if the call still fails.
Technical references
- ESE reference — used to verify the ESE object model, API ordering, or error family relevant to this HRESULT.
- Using ESE and esent.h
- JET_ERR enumeration
Looking for a different code? Search another status or error code.