HRESULT hr;
IStream pi;
if( FAILED(hr = SHCreateStreamOnFile("A:\\a.txt", STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DIRECT, &pi)) )
{ /* エラー */ }

const UINT size = 1457665;
LPBYTE buf = new BYTE[size];
ULONG written;

if( FAILED(hr = pi->Write(buf, size, &written)) )
{ /* エラー */ }

空のフロッピーに1457665バイト(空き容量+1バイト)書き込みます。
空き容量より大きいので失敗すると思ったのですが、なぜかS_OKが返ってきます。
writtenにもsizeと同じ値が返ってきてます。
空き容量が足りないはずなのに、なぜ成功してしまうのでしょうか?