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