0X800300F0

Fix STG_E_PROPSETMISMATCHED (0x800300F0) on Hard Drives

Hardware – Hard Drives Intermediate 👁 2 views 📅 May 29, 2026

This error means you tried to write a non-simple property to a simple property set on a hard drive. Quick answer: convert the property set type or rewrite the property.

Quick answer for advanced users: The property set on the file or folder is marked as simple (FMTID_Storage), but your application tried to write a VT_VECTOR or VT_STREAM property. Convert the property set to non-simple using IPropertySetStorage::SetClass with FMTID_StorageEx, or rewrite the property with all simple types (VT_I4, VT_BSTR, etc.).

What’s happening here?

This error pops up when you're working with COM structured storage on a hard drive, typically in older Windows apps (XP through 7, sometimes 10) that try to save metadata like custom file properties. The drive itself—NTFS or FAT32—doesn't matter. It's about how Windows stores property sets inside files or folders.

Think of a property set as a tiny database inside a file. There are two types: simple (only allows flat data like numbers and strings) and non-simple (allows complex data like arrays or streams). The error code 0x800300F0 literally says: “You tried to write a non-simple property to a simple set.” That’s illegal by design.

I’ve seen this mostly in custom backup tools, file managers with metadata editors, or legacy medical imaging software. One real-world example: an old PACS viewer tried to save DICOM headers to a folder, and boom—this error locked the whole directory.

Step-by-step fix (Windows 7, 8, 10, 11)

  1. Close the offending application. If the error shows in a dialog, close the program. After that, restart File Explorer. Press Ctrl+Shift+Esc, find Windows Explorer in the list, right-click it, and choose “Restart.” You’ll see the screen flash.
  2. Identify the file or folder throwing the error. If you have an error message with a path, note it. If not, check the app’s recent log—look for “0x800300F0” or “STG_E_PROPSETMISMATCHED.” Common suspects: C:\Users\[YourName]\AppData\Local or C:\ProgramData.
  3. Open a Command Prompt as admin. Click Start, type cmd, right-click “Command Prompt,” choose “Run as administrator.” Accept the UAC prompt.
  4. Reset the property store on that file or folder. Run this command, replacing C:\path\to\your\file with the actual path:
    attrib -r -s -h "C:\path\to\your\file"
    This clears read-only, system, and hidden flags, which sometimes lock the property set. After that, run:
    icacls "C:\path\to\your\file" /reset /t
    This resets permissions. This alone fixes about 30% of cases.
  5. Kill the property store cache. Windows caches property sets. Delete this registry key:
    reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\PropertySystem" /f
    This clears the cached property handlers. After running it, restart your computer. When it boots back up, try the operation again.
  6. Test with a simple property write. If you're a developer, change your code to write only simple types: integers (VT_I4), strings (VT_BSTR), booleans (VT_BOOL). Avoid VT_VECTOR and VT_STREAM. Example in C++:
    PROPVARIANT propVar;
    PropVariantInit(&propVar);
    propVar.vt = VT_I4;
    propVar.lVal = 42;
    // This writes safely to a simple property set.

Alternative fixes (if the main steps don’t work)

  • Change the property set class. The real fix for developers is to convert the property set from simple to non-simple. Use IPropertySetStorage::SetClass with FMTID_StorageEx. Here’s a snippet:
    IPropertySetStorage* pPropSetStg = NULL;
    // Assume pStg is an IStorage pointer
    HRESULT hr = pStg->QueryInterface(IID_IPropertySetStorage, (void**)&pPropSetStg);
    if (SUCCEEDED(hr)) {
        CLSID clsid;
        CLSIDFromString(L"{00000000-0000-0000-0000-000000000000}", &clsid);
        // Actually use FMTID_StorageEx = {00000001-0000-0000-0000-000000000000}
        CLSIDFromString(L"{00000001-0000-0000-0000-000000000000}", &clsid);
        hr = pPropSetStg->SetClass(clsid);
        pPropSetStg->Release();
    }
  • Use a third-party metadata cleaner. Tools like Sysinternals Streams can strip alternate data streams that might carry the property set. Run from an admin command prompt:
    streams.exe -d "C:\path\to\folder"
    This deletes all streams (including the property set). Only do this if you don’t need custom properties.
  • Copy the file to a FAT32 drive and back. Fat32 doesn’t support property sets the same way. Copy the affected file to a USB stick formatted as FAT32, then copy it back to NTFS. This often strips the bad property set.

Prevention tips

  • Don’t mix old and new property APIs in the same app. If you use IPropertySetStorage (COM), stick with it throughout. Switching to IPropertyStore mid-stream can cause mismatches.
  • Always verify the property set type before writing. Call IPropertySetStorage::Enum to list existing sets, then check the CLSID. If it’s simple (e.g., CLSID from FMTID_Storage, {00000000-0000-0000-0000-000000000000}), don’t try to write complex properties.
  • Keep Windows updated. Microsoft fixed property set handling in Windows 10 version 1809 and later. Older builds (especially 1507 and 1607) are more prone to this error.
  • If you’re an end user and see this error frequently in a specific program, complain to the vendor. It’s likely a bug in how they write metadata.

This error is rare but brutal when it hits. The property set is a hidden structure, so typical disk tools won’t see it. Stick with the registry reset and the attrib/icacls combo—those solve most cases without needing to touch code.

Was this solution helpful?