What is WFC (Win32 Foundation Classes)? It is a set of C++ classes built upon
MFC that let you develop Win32 applications. It encapsulates different 
groups of API's (like the Registry) into C++ classes to reduce the learning
curve. For the most part I don't want to overlap MFC in functionality. 
However, I have a TCP/IP socket class and so does MFC (but mine works in
Console applications). I am not the author of all of the code. If I've seen
code that I can use I've rolled it into WFC. There's a lot of classes that
encapsulate data structures. The reason for this is my programmers are 
constantly having problems initializing structures that have a data member
holding the size of the structure (i.e. cbSize or dwLength members). 
Microsoft doesn't do a real good job of pointing out that you need to set
the size of data structures *before* calling API's. This leads to a lot of
heartache for first-time NT programmers (in my experience). Also, all
members of the structures are zeroed out before use. WFC will be extended
as it is used in more and more applications.

WFC contains no exception handling. Why? I hate exception handling. It is a
religious issue with me. I prefer to check for failure all over the place.

How much does WFC cost? Nothing. Use it any way you like. Please let me know
of bugs or extensions so I can roll them into the next release. Feel free
to tell me some good news too!

Here's a list of the classes in WFC008

CAccessAllowedEntry            - Encapsulates the ACCESS_ALLOWED_ACE structure.
CAccessControlEntryHeader      - Encapsulates the ACE_HEADER structure.
CAccessControlList             - Encapsulates the ACL structure.
CAccessDeniedEntry             - Encapsulates the ACCESS_DENIED_ACE structure.
CAccessTimeout                 - Encapsulates the ACCESSTIMEOUT structure.
CBitmapCoreHeader              - Encapsulates the BITMAPCOREHEADER structure.
CBitmapFileHeader              - Encapsulates the BITMAPFILEHEADER structure.
CBitmapInfoHeader              - Encapsulates the BITMAPINFOHEADER structure.
CCircle                        - Draws a circle on the screen.
CCompVars                      - Encapsulates the COMPVARS structure.
CColorAdjustment               - Encapsulates the COLORADJUSTMENT structure.
CDeviceControlBlock            - Encapsulates DCB structure.
CDocInfo                       - Encapsulates the DOCINFO structure.
CDrawingObjectGrid             - A grid of drawing objects like CCircle, etc.
CDummyFile                     - A class that traps all calls to CFile that
                                 would blow up if you weren't a disk file.
CEllipse                       - Draws an ellipse on the screen.
CEventLog                      - The event logger. Makes logging easier.
CFilterKeys                    - Encapsulates the FILTERKEYS structure.
CLabeledGrid                   - A subclass of CDrawingObjectGrid that adds
                                 text labels to the objects.
CListeningSocket               - Establishes a socket that people can connect
                                 to (ie, makes a server socket)
CLZFile                        - Unfinished class. Will be derived from CFile
                                 to handle LZFiles (compressed files).
CMemoryStatus                  - Encapsulates the MEMORYSTATUS structure.
CMouseKeys                     - Encapsulates the MOUSEKEYS structure.
CNamedPipe                     - Unfinished class. Will be derived from CFile
CNetwork                       - Base class for all networking functionality
CNetworkConnectionInformation  - Class based on CONNECTION_INFO_1 structure
CNetworkConnections            - Class that plays with network connections
CNetworkFileInformation        - Class based on FILE_INFO_3 structure
CNetworkFiles                  - Class that plays with network files
CNetworkResources              - Class that plays with network resources
CNetworkResourceInformation    - Class based on NETRESOURCE structure
CNetworkSessions               - Class that plays with network sessions
CNetworkSessionInformation     - Class based on SESSION_INFO_502 structure
CNetworkShareInformation       - Class based on SHARE_INFO_2 structure
CNetworkShares
CNetWorkstation                - Gathers information about the workstation
COutlineTextMetric             - Encapsulates the OUTLINETEXTMETRIC structure.
COverlapped                    - Plays with OVERLAPPED structure.
CPerfCounterDefinition         - Encapsulates the PERF_COUNTER_DEFINITION
                                 structure.
CPerfInstanceDefinition        - Encapsulates the PERF_INSTANCE_DEFINITION
                                 structure.
CPixelFormatDescriptor         - Encapsulates the PIXELFORMATDESCRIPTOR structure.
CRAS                           - Remote Access Services. Partially tested, it 
                                 does dials phone book entries...
CRASAuthenticationMessageBlock - Encapsulates the RASAMB structure.
CRASInternetProtocol           - Encapsulates the RASPPPIP structure.
CRASInternetworkPacketExchange - Encapsulates the RASPPPIPX structure.
CRASNetBEUIFramer              - Encapsulates the RASPPPNBF structure.
CRasterizerStatus              - Encapsulates the RASTERIZER_STATUS structure.
CRectangle                     - Draws a rectangle on the screen
CRegistry                      - Encapsulates the Registration Database 
                                 (Registry API)
CRoundedRectangle              - Draw a rectangle with rounded corners
CSecurityAttributes            - Encapsulates the SECURITY_ATTRIBUTES
                                 structure.
CSecurityQualityOfService      - Encapsulates the SECURITY_QUALITY_OF_SERVICE
                                 structure.
CSerialFile                    - Treats the serial port like it was a CFile
CServer                        - Decrypts data scrambled by NetServerGetInfo()
CService                       - NT Services class.
CServiceControlManager         - Plays with the Service Control Manager.
CServiceStatus                 - Encapsulates the ENUM_SERVICE_STATUS structure.
CSessionInformation            - Session iformation based on SESSION_INFO_502
                                 structure. Basically, gives you same info as
                                 Control Panel->Server->Users->Connected Users
CSimpleSocket                  - Base class for TCP/IP sockets. Derived from
                                 CDummyFile.
CSimpleSocketFile              - Turns an existing CSimpleSocket into a CFile.
                                 Generally, this is called from 
                                 CListeningSocket::OnNewConnection()
CSoundSentry                   - Encapsulates the SOUNDSENTRY structure.
CSquare                        - Draws a square on the screen
CSquiggle                      - A type of CRectangle that makes creating
                                 oscilliscope type displays real easy
CSquiggleData                  - Data taken from o-scopes to be given to
                                 CSquiggle
CStickyKeys                    - Encapsulates the STICKYKEYS structure.
CSystemAuditEntry              - Encapsulates the SYSTEM_AUDIT_ACE structure.
CTalkingSocket                 - A socket you can use to connect to existing
                                 sockets (you connect to a server).
CTape                          - Under development. Will encapsulate the Tape
                                 API. Derived from CFile...
CTextMetric                    - Encapsulates the TEXTMETRIC structure.
CToggleKeys                    - Encapsulates the TOGGLEKEYS structure.
CUniformResourceLocator        - Plays with URL's 
                                 Example: http://www.microsoft.com/hello.html
CUniversalNamingConvention     - Plays with UNC's 
                                 Example: \\buckaroo\public\neato\readme.txt
CWaitCursor                    - Ye Olde Wait Cursor class
CWindowPlacement               - Encapsulates the WINDOWPLACEMENT structure.
CWorkstationInformation        - Patterned after WKSTA_INFO_102, used in
                                 CNetWorkstation::Enumerate
CWorkstationUser               - Patterned after WKSTA_USER_INFO_1, used in
                                 CNetWorkstation::Enumerate


Miscellaneous Functions:

Convert_NERR_Code_to_String    - Converts NERR_* error codes to text; the 
                                 FormatMessage() trick doesn't work on these
                                 error codes

What's New in Release 009:

CLZFile                        - Handles the LZxxx API
CTape                          - Handles the Tape API
CTapeGetDriveParameters        - Encapsulates the TAPE_GET_DRIVE_PARAMETERS
                                 data structure
CTapeGetMediaParameters        - Encapsulates the TAPE_GET_MEDIA_PARAMETERS
                                 data structure
CTapeSetDriveParameters        - Encapsulates the TAPE_SET_DRIVE_PARAMETERS
                                 data structure
CTapeSetMediaParameters        - Encapsulates the TAPE_SET_MEDIA_PARAMETERS
                                 data structure

Bug Fixes in Release 009:
CDummyFile                     - Added ASSERTs to unsupported functions
CRegistry                      - Encapsulated the data members
CSerialFile                    - Now has provisions for buffer checking and
                                 flow control
CSimpleSocket                  - Changed AliasList to a CStringList

NOTES:

I've tried to get C++ religion and make the classes "canonical" (I hate it
when oopsters use big words). Basically this means I've added a "copy
constructor". Here's the affected classes:

CAccessAllowedEntry
CAccessControlEntryHeader
CAccessControlList
CAccessDeniedEntry
CBitmapCoreHeader
CBitmapInfoHeader
CColorAdjustment
CMemoryStatus
CNetworkConnectionInformation
CNetworkFileInformation
CNetworkResourceInformation
CNetworkSessionInformation
CNetworkShareInformation
COFStruct
COutlineTextMetricA
COutlineTextMetricW
CPixelFormatDescriptor
CSystemAuditEntry
CTextMetricA
CTextMetricW
CWorkstationInformation
CWorkstationTransport

I've also begun adding Dump() member functions. Here's what I've got so far:
CAccessAllowedEntry
CAccessControlEntryHeader
CAccessControlList
CAccessDeniedEntry
CCircle
CColorAdjustment
CDeviceControlBlock
CDummyFile
CEllipse
CEventLog
CDrawingObjectGrid
CLabeledGrid
CListeningSocket
CLZFile
CMemoryStatus
CNamedPipe
CNetwork
CNetworkConnectionInformation
CNetworkConnections
COFStruct
COutlineTextMetricA
COutlineTextMetricW
CPixelFormatDescriptor
CRectangle
CRoundedRectangle
CSerialFile
CSimpleSocket
CSquare
CSystemAuditEntry
CTalkingSocket
CTextMetricA
CTextMetricW
CUniformResourceLocator
CUniversalNamingConvention

Sam Blackburn
CI$: 76300,326
Internet: sammy@sed.csc.com

