~lucidiot's wiki

Microsoft Works Portfolio

The Portfolio is Microsoft Works’ answer to Microsoft Office Binder. It was introduced in Works 6.0, in 2001, the same year when Office XP came out and removed Binder.

It is a lot more basic than Binder though; where Binder can transform itself into whatever program is needed to display each supported file, Portfolio just groups some files together, supports copy-pasting to and from those collections of files, lets you add comments, and lets you send those files to a new Word Processor document, a printer, an e-mail recipient or a folder.

You can get a preview for a few supported formats, but to open a file, you will first have to send it to a folder and open it yourself. If you need to update the file, first remove the old file, and then put the new one back in. This is more like the Office Clipboard Manager than Binder!

The executable for Works Portfolio is named WksSb.exe, which might mean Works Shoebox. This is not to be confused with the actual Shoebox, which is the Works clipart manager.

The Portfolio stores its files under %USERPROFILE%\Local Settings\Application Data\Microsoft\Works\Portfolio, or on Vista and later, %LOCALAPPDATA%\Microsoft\Works\Portfolio. Two files exist for each collection created with the Portfolio, both named after the collection’s name:

  • <Name>.wsb, whose extension probably stands for Works Shoebox again, is a Compound File Binary holding the entire collection metadata and file contents.
  • <Name>.dir is a hidden directory created by the Portfolio as a cache, to avoid having to extract files all of the time.

WSB files

  • Document the CFB structure
  • Test with files other than images
  • Test with large files
  • Write a Windows 2000-compatible CFB extractor

The WSB files hold the entire collection. This includes the file names, file sizes, file contents, thumbnails, comments, original paths, and order of the files within the collection. These are stored in a very common binary format for Microsoft apps of the time, Compound File Binary. This format is a mini-filesystem, with a file allocation table, sectors, etc., which can hold directories and files, known as storages and streams. A CFB file can contains streams and storages, and storages can also contain streams and other storages.

├── 1
│   ├── __bthumb
│   ├── __cf1
│   ├── __fname
│   ├── __size
│   └── __thumb
├── __CountDelayThumb
├── __IDsDelayThumb
├── __LastID
├── PfOrder
├── PfSelection
└── __SizeUsed

Root streams

__CountDelayThumb
TODO
__IDsDelayThumb
TODO
__LastID
TODO
PfOrder
TODO
PfSelection
TODO
_SizeUsed
TODO

Streams per file

__bthumb
TODO
__cf1
File contents, prefixed with 24 bytes of data.
__fname
TODO
__size
TODO
__thumb
TODO

Cache directory

The cache directory, holding the same name as the WSB file but with a .dir extension, is automatically created by the Portfolio and marked as hidden. It contains each file in the collection, extracted from the WSB file, with its real name and other attributes, each within a separate directory holding the same name as the storages in the WSB.

Registry

The Portfolio stores its settings in the Registry:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio]

[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio\Frame]
"WidgetLastRc_Left"=dword:00000601
"WidgetLastRc_Right"=dword:00000650
"WidgetLastRc_Top"=dword:00000000
"WidgetLastRc_Bottom"=dword:0000002c
"TbLastRc_Left"=dword:00000719
"TbLastRc_Right"=dword:00000768
"TbLastRc_Top"=dword:00000000
"TbLastRc_Bottom"=dword:0000002c
"WidgetEdgeIndexTbMode"=dword:00000002
"WidgetEdgeIndexWidgMode"=dword:00000001
"WidgetSize_Cx"=dword:0000009e
"WidgetSize_Cy"=dword:000001b8
"Widget_Pinning"=dword:00000000
"PfViewMode"=dword:00000000

[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio\Options]
"ShowMeNoHelp"=dword:00000001
"NoSounds"=dword:00000000

[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio\Views]
"AnnDlgSize_Cx"=dword:00000206
"AnnDlgSize_Cy"=dword:00000177
"LastPortfolio"="Portfolio Name"
"DropHRect_Left"=dword:00000000
"DropHRect_Right"=dword:00000066
"DropHRect_Top"=dword:00000000
"DropHRect_Bottom"=dword:00000066
"DropVRect_Left"=dword:00000719
"DropVRect_Right"=dword:00000780
"DropVRect_Top"=dword:00000000
"DropVRect_Bottom"=dword:0000041c
"DropSnappyRect_Left"=dword:00000601
"DropSnappyRect_Right"=dword:00000668
"DropSnappyRect_Top"=dword:0000002a
"DropSnappyRect_Bottom"=dword:000001ba
"Drop_EdgeIndex"=dword:00000001
"Drop_ToolBar"=dword:00000000
"BigModeRect_Left"=dword:00000280
"BigModeRect_Right"=dword:00000500
"BigModeRect_Top"=dword:0000012c
"BigModeRect_Bottom"=dword:000002f0
"BigModeMaximized"=dword:00000000

Document those values

Frame

WidgetLastRc_Left
TODO
WidgetLastRc_Right
TODO
WidgetLastRc_Top
TODO
WidgetLastRc_Bottom
TODO
TbLastRc_Left
TODO
TbLastRc_Right
TODO
TbLastRc_Top
TODO
TbLastRc_Bottom
TODO
WidgetEdgeIndexTbMode
TODO
WidgetEdgeIndexWidgMode
TODO
WidgetSize_Cx
TODO
WidgetSize_Cy
TODO
Widget_Pinning
TODO
PfViewMode
TODO

Options

ShowMeNoHelp
TODO
NoSounds
TODO

Views

AnnDlgSize_Cx
TODO
AnnDlgSize_Cy
TODO
LastPortfolio
TODO
DropHRect_Left
TODO
DropHRect_Right
TODO
DropHRect_Top
TODO
DropHRect_Bottom
TODO
DropVRect_Left
TODO
DropVRect_Right
TODO
DropVRect_Top
TODO
DropVRect_Bottom
TODO
DropSnappyRect_Left
TODO
DropSnappyRect_Right
TODO
DropSnappyRect_Top
TODO
DropSnappyRect_Bottom
TODO
Drop_EdgeIndex
TODO
Drop_ToolBar
TODO
BigModeRect_Left
TODO
BigModeRect_Right
TODO
BigModeRect_Top
TODO
BigModeRect_Bottom
TODO
BigModeMaximized
TODO