Organized bookmarks to Win32API posts of Raymond Chen's blog "The Old New Thing".
This page provides a list of links to subset of posts of Raymond Chen's famous blog The Old New Thing. The subset is limited mainly to Win32API and some COM-related stuff.
The reason why I maintain this page is that it often provides information which is missing on MSDN or which is described there in a cryptic way, and also because the blog is not easily searchable.
The links here are categorized by their topic instead of a chronological order. Sometimes, when appropriate, a single post may be put into multiple categories.
In some (quite rare) cases, links to other sources are included if they are found useful.
Disclaimer: I am not claiming authorship of any linked contents. This is only about hopefully useful organization of the great articles Raymond has written over the years.
HWND
(General Point of View)
IUnknown
IMoniker
ICallback
IContextMenu
IFileDialog
IMultiLanguage
INamespaceWalk
IStream
IVirtualDesktopManager
CreateProcess
does not wait for the process to start
CreateProcess
function modify its input command line?
CreateProcess
calls?
hPrevInstance
parameter to WinMain
?
RunAsInvoker
a secret, even higher UAC setting?
WriteProcessMemory
succeeds in writing to read-only memory?
WriteProcessMemory
manage the page protection for me?
_beginthread
and _beginthreadex
?
GetExitCodeThread
for a thread that I know for sure has exited, why does it still say STILL_ACTIVE
?
CreateRemoteThread
on 64-bit systems?
TerminateThread
function synchronous?
TerminateThread
from code that waits for a job object to empty
FreeLibraryAndExitThread
?
msWindowLength
parameter to SetThreadpoolTimer
mean?
CreateTimerQueueTimer
and SetThreadpoolTimer
?
QueueUserWorkItem
?
StartThreadpoolIo
WAIT_ABANDONED
SRWLOCK
) doesn’t remember who the shared lock owner is, does that mean it’s okay to acquire it recursively?
WaitOnAddress()
WaitOnAddress
lets you create a synchronization object out of any data variable, even a byte
WaitOnAddress
WaitOnAddress
WaitOnAddress
to support timeouts
WaitOnAddress
with futexes (futexi? futexen?)
WaitOnAddress
WaitOnAddress
WaitOnAddress
WaitOnAddress
WaitForMultipleObjects()
and RelativesMsgWaitForMultipleObjects
and the queue state
MsgWaitForMultipleObjects
with zero handles
MsgWaitForMultipleObjects
is a bug waiting to happen
WaitForMultipleObjects
return ERROR_INVALID_PARAMETER
when all the parameters look valid to me?
WaitForMultipleObjects
to return, how do I find out about the other ones?
MsgWaitForMultipleObjects
?
GetProcAddress
a function I dllexport'ed?
HINSTANCE
and HMODULE
?
HINSTANCE
from a static library
LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)
is fundamentally flawed
FreeLibraryAndExitThread
?
LOAD_LIBRARY_AS_DATAFILE
(or similar flags) doesn't get to play in any reindeer module games
GetModuleFileNameEx
on your own process?
GetModuleInfo
fail to produce an entry point for executables?
SizeOfImage
mean in the MODULEINFO
structure?
LoadLibrary
fails?
DllMain()
DllMain
DllMain
: Inadvertent deadlock
DllMain
, part 3
DLL_PROCESS_DETACH
notification is not necessarily the one that got the DLL_PROCESS_ATTACH notification
DLL_PROCESS_DETACH
without even realizing it
DLL_PROCESS_DETACH
tells you that the process is exiting, your best bet is just to return without doing anything
CP_ACP
, even in the face of subtle hints that the file is UTF-8
FreeResource
and, say, DestroyAcceleratorTable
MAKEINTRESOURCE
macro to smuggle an integer inside a pointer?
FindResource
and FindResourceEx
LoadString
can load strings with embedded nulls, but your wrapper function might not
Alt+Tab
list?
Alt+Tab
order slightly
STARTF_USESHOWWINDOW
override the parameter passed to ShowWindow
?
WaitForInputIdle
should really be called WaitForProcessStartupComplete
WaitForInputIdle
waits for any thread, which might not be the thread you care about
DllMain
notifications, how can an EXE receive a notification when a thread is created (for example)?
CommandLineToArgvW
function intended to be used?
CommandLineToArgvW
HWND
(General Point of View)GWLP_WNDPROC
?
GWLP_USERDATA
WM_DESTROY
and WM_NCDESTROY
?
WM_DESTROY
message is like prank calling somebody pretending to be the police
GetWindowText
GetWindowText
so weird?
SetForegroundWindow
immediately followed by GetForegroundWindow
not return the same window back?
HWND_TOP
and HWND_TOPMOST
?
WindowFromPoint
, ChildWindowFromPoint
, RealChildWindowFromPoint
, when will it all end?
GetParent
, just as confusing as EnumClaw
, but it's an actual function! (GetAncestor()
, GetWindow()
)SetParent
trying to tell me about synchronizing the UI state?
WS_EX_TRANSPARENT
)WS_EX_TRANSPARENT
is a lie, or at least not the entire truth
WS_EX_COMPOSITED
to get rid of my redrawing flicker, but it resulted in sluggish response
WS_CLIPCHILDREN
and still be able to draw a control with a transparent background?
HINSTANCE
passed to CreateWindow
and RegisterClass
used for?
HINSTANCE
in RegisterClass
is like identity theft
RegisterClass
function takes ownership of the custom background brush, why is it leaking?
CS_SAVEBITS
do?
CS_OWNDC
class style do?
CS_CLASSDC
class style do?
CS_NOCLOSE
style does affect all windows of the class, just not necessarily in an immediately noticeable way
PrintWindow
hate CS_PARENTDC
? Because EVERYBODY hates CS_PARENTDC
!
PrintWindow
hate CS_PARENTDC
? redux
RealGetWindowClass
so much more real than GetClassName
?
CreateWindowEx
take the extended style parameter as its first parameter instead of its last?
CS_GLOBALCLASS
?
SetWindowSubclass
?
WM_GETMINMAXINFO
and clamp the results?
WM_DWMSENDICONICTHUMBNAIL
message when I ask for an iconic representation?
MARGINS
parameter to the DwmExtendFrameIntoClientArea
function controls how far the frame extends into the client area
TAB
key to navigate in non-dialogs
TAB
key to navigate in non-dialogs, redux
WM_GETDLGCODE
GetDialogBaseUnits
is a crock
MapDialogRect
mapping dialog rectangles?
DS_SHELLFONT
flag?
DS_SHELLFONT = DS_FIXEDSYS | DS_SETFONT
?
TranslateAccelerator
do?
IsDialogMessage
or TranslateAccelerator
TAB
key work on controls I've marked as WS_TABSTOP
?
WM_USER
message in a dialog box
DS_CONTROL
style for?
DS_CONTROL
style
MessageBox
wrap at the right location?
OFN_NONETWORKBUTTON
option in the OPENFILENAME
structure, but it has no effect on the network item in the navigation pane
FileSavePicker
to open in the same folder that was picked by the FileOpenPicker
or FolderPicker
? (win32/COM equivalent mentioned at the end of the post)TAB
key to navigate in non-dialogs
TAB
key to navigate in non-dialogs, redux
WM_QUIT
message
MessageBox
, the cheap version
MessageBox
, the better version
DS_SHELLFONT
have on property sheet pages?
PSM_ISDIALOGMESSAGE
is to modeless property sheets as IsDialogMessage
is to modeless dialog boxes
PROPSHEETPAGE
structure with your own bonus data
PSN_SETACTIVE
notification is sent each time your wizard page is activated
PROPSHEETPAGE
structure
PROPSHEETPAGE
structures to PropertySheet?
BS_PUSHLIKE
button style for? (Don't use, it's completely obsolete nowadays. Use check box or radio button instead.)WM_SETREDRAW
)EM_SETHILITE
message?
CapsLock
warning on password edit controls?
ES_NUMBER
edit control style
ES_NUMBER
edit control style?
LVM_HITTEST
and LVM_INSERTMARKHITTEST
?
LVN_ODSTATECHANGED
notification when there's already a perfectly good LVN_ITEMCHANGED
notification?
WM_SETREDRAW
)WM_NCCALCSIZE
message
WM_NCCALCSIZE
message
WM_NCCALCSIZE
to our scrollbar sample
WHEEL_DELTA
chosen to be 120 instead of a much more convenient value like 100 or even 10?
TBSTYLE_EX_VERTICAL
and CCS_VERT
?
TTM_RELAYEVENT
and why it results in a one-second periodic timer running as long as the tooltip is visible
Ctrl
+arrow accelerator for moving the trackbar by just one unit, part 1: Initial plunge
Ctrl
+arrow accelerator for moving the trackbar by just one unit, part 2: Second try
TVS_CHECKBOXES
style is quirky, which is a polite way of saying that it is crazy
TVS_CHECKBOXES
style
GetKeyState
and GetAsyncKeyState
?
PostMessage
DefWindowProc
DefWindowProc
, because you were doing that anyway after all
Get/SetMessageExtraInfo
ever used for?
GetWindowLongPtr
returning a garbage value on 64-bit Windows?
TrackMouseEvent
tracks mouse events in your window, but only if the events belong to your window
SendMessageTimeout
reaches its timeout?
PostMessage
the WM_COPYDATA
message, but I can SendMessageTimeout
it with a tiny timeout?
DispatchMessageA
and DispatchMessageW
are identical, why have both?
GetQueueStatus
and the queue state
HINSTANCE
passed to SetWindowsHookEx
used for?
SetWindowsHookEx
actually mean?
SetFocus
fail without telling me why?
wParam
of the WM_NOTIFY
message and the idFrom
in the NMHDR
structure.
WM_COMMAND
message
WM_NOTIFY
message
WM_DESTROY
and WM_NCDESTROY
?
WM_CLOSE
)WM_WINDOWPOSCHANGED
to react to window state changes
WM_WINDOWPOSCHANGING
to intercept window state changes
WM_PAINT
)WM_PAINT
message?
WM_PRINTCLIENT
?
WM_SETREDRAW
, but you might be able to do better
WM_SETREDRAW
)WM_SETREDRAW
to speed up adding a lot of elements to a control
WM_KILLFOCUS
is the wrong time to do field validation
WM_KILLFOCUS
message
MoveWindow
function generate the WM_GETMINMAXINFO
message?
WM_MOUSEENTER
message?
WM_MOUSEMOVE
messages?
WM_MOUSEMOVE
messages, but why do they keep streaming in?
WM_MOUSEMOVE
?
WM_CHANGEUISTATE
, WM_QUERYUISTATE
and WM_UPDATEUISTATE
)WM_UPDATEUISTATE
and WM_CHANGEUISTATE
messages
WM_UPDATEUISTATE
message?
WM_GETDLGCODE
DLGC_WANTALLKEYS
and DLGC_WANTMESSAGE
have the same value?
WM_ACTIVATE
message
WM_ACTIVATE
message when it isn't active?
WM_CANCELMODE
)WM_CONTEXTMENU
message (WM_CONTEXTMENU
)WM_NCHITTEST
is for hit-testing, and hit-testing can happen for reasons other than the mouse being over your window
WM_NULL
message out of the blue? (WM_NULL
)PostQuitMessage
function? (WM_QUIT
)PostQuitMessage
know which thread to post the quit message to? (WM_QUIT
)WM_SETFONT
message? (WM_SETFONT
)WM_GETFONT
message to a window, why don't I get a font? (WM_GETFONT
)WM_TIMER
handler takes longer than the timer period, will my queue fill up with WM_TIMER
messages?
WM_TIMER
message from being generated for that timer, but it doesn't retroactively remove ones that were already generated
WM_QUERYENDSESSION
, WM_ENDSESSION
)WM_DEVICECHANGE
? (WM_DEVICECHANGE
)WM_ENDSESSION
)WM_ENDSESSION
message, your process can be terminated at any time (WM_ENDSESSION
)RECT
s endpoint-exclusive?
CS_OWNDC
class style do?
CS_CLASSDC
class style do?
DrawIcon
?
RDW_INTERNALPAINT
flag?
SaveDC
and RestoreDC
?
BitBlt
raster opcodes calculated?
DrawText
and tab stops
GetTextExtentPoint
return the correct extent for strings containing tabs?
CopyRect
and EqualRect
?
CopyRect
and EqualRect
SetCursor
lasts only until the next SetCursor
SetCursor
?
SM_CXCURSOR
system metric?
CreatePen
and just using the stock null pen?
BITMAPINFO
hSection
parameter to CreateDIBSection
for?
LockWindowUpdate()
LockWindowUpdate
do?
LockWindowUpdate
meant to be used?
LockWindowUpdate
meant to be used?
LockWindowUpdate
not meant to be used?
LockWindowUpdate
DRAWITEMSTRUCT
structure?
UXTHEME.DLL
BeginBufferedPaint
: It's not just for buffered painting any more
IsThemeActive
, IsAppThemed
, and IsCompositionActive
differ?
(0,0)
as its upper left coordinate?
ptMaxSize
and ptMaxPosition
for multiple monitors?
CLSID_ContextSwitcher
?
IContextCallback::ContextCallback
?
CoGetApartmentType
mean?
APTTYPE_CURRENT
? I mean, of course I’m current.
0x8000001F = RO_E_BLOCKED_CROSS_ASTA_CALL
?
COINIT_SPEED_OVER_MEMORY
flag to CoInitializeEx
do?
CoUninitialize
, how can COM be running after it is uninitalized?
CoMarshalInterThreadInterfaceInStream
and CoGetInterfaceAndReleaseStream
?
CoMarshalInterface
and CoUnmarshalInterface
?
CoGetInterfaceAndReleaseStream
does not mix with smart pointers
QueryInterface(IID_IMarshal)
and then nothing?
HRESULT
to a Win32 error code?
RETURN_IF_FAILED
macro that some errors are ignorable?
E_NOINTERFACE
error
0x8000001F = RO_E_BLOCKED_CROSS_ASTA_CALL
?
RPC_E_SYS_CALL_FAILED
?
RPC_E_WRONGTHREAD
exception when we’re on the right thread
UuidFromString
, IIDFromString
, CLSIDFromString
, GUIDFromString
...
UuidToString
, StringFromCLSID
, StringFromIID
, and StringFromGUID2
?
BSTR
cache anyway?
HSTRING
semantics
WindowsPreallocateStringBuffer
function?
VARIANT
and VARIANTARG
?
VarCmp
vs VariantCompare
VarDateFromStr
parse back a Hungarian date that was generated by VarBstrFromDate
?
IUnknown
IUnknown::AddRef
method return 0?
IUnknown::QueryInterface
IUnknown::QueryInterface
, episode 2
IUnknown::QueryInterface
, episode 3
IUnknown::QueryInterface
, episode 4
IUnknown
, I know you have many, I’ll take any of them
IMoniker
ICallback
IContextMenu
IContextMenu
, part 1 - Initial foray
IContextMenu
, part 2 - Displaying the context menu
IContextMenu
, part 3 - Invocation location
IContextMenu
, part 4 - Key context
IContextMenu
, part 5 - Handling menu messages
IContextMenu
, part 6 - Displaying menu help
IContextMenu
, part 7 - Invoking the default verb
IContextMenu
, part 8 - Optimizing for the default command
IContextMenu
, part 9 - Adding custom commands
IContextMenu
, part 10 - Composite extensions - groundwork
IContextMenu
, part 11 - Composite extensions - composition
IExecuteCommand
.txt
?
IContextMenu
handler, no really, don't do it
IContextMenu::InvokeCommand
doesn't get called even though you returned success from IContextMenu::QueryContextMenu
IFileDialog
SetClientGuid
method of the common file and folder dialogs lets you give names to those dialogs, too (multiple contexts for open/save dialogs)FileSavePicker
to open in the same folder that was picked by the FileOpenPicker
or FolderPicker
? (win32/COM equivalent mentioned at the end of the post)FOS_FORCEFILESYSTEM
?
IMultiLanguage
LCID
s and RFC 1766 language codes
IMultiLanguage2::DetectInputCodepage
INamespaceWalk
INamespaceWalk::Walk
operation will walk into?
INamespaceWalk::Walk
operation?
INamespaceWalk::Walk
operation a little faster
IStream
CreateStreamOnHGlobal
, part 1: Introduction and basic usage
CreateStreamOnHGlobal
, part 2: Suppressing the deletion of an unknown HGLOBAL
CreateStreamOnHGlobal
, part 3: Suppressing the deletion of a shared HGLOBAL
CreateStreamOnHGlobal
, part 4: Non-movable memory
GetHGlobalFromStream
when sharing was never your intention
IVirtualDesktopManager
Ctrl+C
WM_RENDERFORMAT
and WM_RENDERALLFORMATS
?
stdout
CF_HDROP
by providing file attribute information
CF_SYLK
and CF_DIF
clipboard formats?
HGLOBAL
edition)
IStream
edition)
IStorage
edition)
SM_CXDRAG
?
IDropTarget
instead of on the command line?
IDropTarget
instead of on the command line? - bonus content
DragOver
mouse message?
CLSID_DragDropHelper
?
SHLoadInProc
unload a DLL?
SHGFI_USEFILEATTRIBUTES
mean?
SHGetMalloc
, SHAlloc
, CoGetMalloc
, and CoTaskMemAlloc
EXE
.txt
?
SEE_MASK_UNICODE
flag in ShellExecuteEx
actually do?
ShellExecuteEx
function
ShellExecute
hooks designed for?
ShellExecute
return SE_ERR_ACCESSDENIED
for nearly everything?
ShellExecute
a file, but with a specific program instead of the default program?
CSIDL_DESKTOP
and CSIDL_DESKTOPDIRECTORY
?
SHCIDS_CANONICALONLY
is the moral equivalent in the shell namespace of the Unicode ordinal comparison
SHFileOperation
SHFileOperation
have internal error codes for DVD?
SHAutoComplete
giveth, and SHAutoComplete
taketh away
lpClass
member of SHELLEXECUTEINFO
used for?
ShellExecute
returns SE_ERR_ACCESSDENIED
and ShellExecuteEx
returns ERROR_ACCESS_DENIED
SHGetSpecialFolderPath
take such a long time before returning a network error?
SHGetFileInfo()
)IShellLibrary
)IShellFolder::BindToObject
is a high-traffic method; don't do any heavy lifting
IExtractIcon::Extract
tells me to go jump in a lake?
IShellItem
IShellItem
, the old-fashioned way
IShellItemArray
from a bunch of file paths?
IShellItemArray
?
IShellItem
to see what it’s made of
SHGetKnownFolderPath
return E_FAIL
for a known folder?
SHGetKnownFolderPath
fail when impersonating?
SHSetKnownFolderPath
to change the location of FOLDERID_LocalAppData
?
SHGetFileInfo
give me customized folder icons?
SHGetFolderPath(CSIDL_COMMON_DOCUMENTS)
that returned ERROR_PATH_NOT_FOUND
HSHELL_WINDOWDESTROYED
notification raised when a window is hidden, even if it hasn’t been destroyed?
HCNE_UPDATEDIR
notifications that my code never generates?
SHCNE_UPDATEDIR
notifications that my code never generates?
IFileOperation
skip junctions even though I passed FOFX_NOSKIPJUNCTIONS
?
STGM_READ | STGM_WRITE
does not grant read/write access
IWbemClassObject
)IDataObject::GetData
and IDataObject::GetDataHere
is significant
IInitializeWithWindow
pattern (IInitializeWithWindow
)IHttpFilter
interface
VirtualAlloc
even if it ignores it?
IsBadXxxPtr
should really be called CrashProgramRandomly (IsBadWritePtr()
et al.)PIPE_WAIT
pipe and a PIPE_NOWAIT
pipe?
stdin
and stdout
to pipes, for you can easily deadlock
stdin
ReadDirectoryChangesW
reads directory changes, but what if the directory doesn't change?
FILE_FLAG_SEQUENTIAL_SCAN
and FILE_FLAG_RANDOM_ACCESS
affect how the operating system treats my file?
FILE_FLAG_SEQUENTIAL_SCAN
but it didn’t seem to speed up my sequential scanning
OVERLAPPED
structure with synchronous I/O, too
FILE_FLAG_NO_BUFFERING
and FILE_FLAG_WRITE_THROUGH
, but we would like our WriteFile
to go even faster
ILE_FLAG_WRITE_THROUGH
and FILE_FLAG_NO_BUFFERING
for memory-mapped files
FILE_FLAG_NO_BUFFERING
and FILE_FLAG_WRITE_THROUGH
flags
ReadFile
return FALSE
when the end of the file is reached?
SetFileValidData
fail even though I enabled the SE_MANAGE_VOLUME_NAME
privilege?
GENERIC_ALL
equivalent to GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE
?
CancelIoEx
can cancel I/O on console input, which is kind of nice
CancelIoEx
can cancel synchronous I/O, which is kind of nice
IsPathRelative
return FALSE
for paths that are drive-relative?
MapViewOfFile
on the same mapping handle simultaneously from different threads?
GetFullPathName
documentation is trying to warn me about?
WriteFile
or ReadFile
to complete synchronously or hang, in order to test something?
CopyFile
, but also flush the file buffers before the destination handle is closed?
OVERLAPPED
associated with asynchronous I/O is passed by address
hEvent
in the OVERLAPPED
structure signaled anyway?
OVERLAPPED
structure with synchronous I/O, too
ReadFile
return FALSE
when the end of the file is reached?
FILE_FLAG_OVERLAPPED
?
StartThreadpoolIo
WriteFile
or ReadFile
to complete synchronously or hang, in order to test something?
NULL
as the lpNumberOfBytesRead
when issuing overlapped I/O?
FILE_FLAG_DELETE_ON_CLOSE
flag applies to the handle, also known as the file object, which is not the same as the file
SECURITY_ATTRIBUTES
and SECURITY_DESCRIPTOR
structures valid after using them to create a file?
ReadDirectoryChangesW
still report files created inside subdirectories?
GetFinalPathNameByHandle()
)MoveSecurityAttributes
policy affects only how Explorer recalculates ACLs when a file is moved; everybody else is on their own
S-1-15-2-xxx
?
S-1-15-3-xxx
?
STANDARD_RIGHTS_REQUIRED
, you may as well ask for the moon
AdjustTokenPrivileges
, but I was still told that a necessary privilege was not held
AdjustTokenPrivileges
, but I was still told that a necessary privilege was not held, redux
EncodePointer
function for obfuscating pointers
GetTokenInformation
?
EncryptMessage
function
RegOpenKey
instead of RegOpenKeyEx
?
RegSetKeySecurity
propagate inheritable ACEs, but SetSecurityInfo
does?
RegNotifyChangeKeyValue
stop notifying once the key is deleted?
REG_NOTIFY_THREAD_AGNOSTIC
flag on systems that don’t support it? part 1
REG_NOTIFY_THREAD_AGNOSTIC
flag on systems that don’t support it? part 2
REG_NOTIFY_THREAD_AGNOSTIC
flag on systems that don’t support it? part 3
REG_NOTIFY_THREAD_AGNOSTIC
flag on systems that don’t support it? part 4
REG_NOTIFY_THREAD_AGNOSTIC
flag on systems that don’t support it? part 5
RegOpenKeyEx
RegOverridePredefKey
(i.e. don't use it.)TEXT
vs. _TEXT
vs. _T
, and UNICODE
vs. _UNICODE
printf
-style format specifiers in Visual C++
SetThreadUILanguage
cannot be used to restore the thread UI language
CharUpper
and CharLower
guarantee that the uppercase version of a string is the same length as the lowercase version? (use LCMapStringEx()
in any new code)activeCodePage
manifest element can be used for more than just setting UTF-8 as the active code page
IMultiLanguage2::DetectInputCodepage
GetDistanceOfClosestLanguageInList
function
WideCharToMultiByte
to convert strings encoded in UTF-16BE?
ShutdownBlockReasonCreate
from my service doesn't stop the user from shutting down
ERROR_BROKEN_PIPE
?
GetLogicalProcessorInformation()
)CreateMenu
and CreatePopupMenu
?
HANDLE
return values so inconsistent?
WT_EXECUTELONGFUNCTION
flag to QueueUserWorkItem
SYSTEMTIME
directly to a local-time-based SYSTEMTIME
SetTimer
with a timer ID that is guaranteed not to conflict with any other timer ID?
WM_QUERYENDSESSION
, WM_ENDSESSION
)GetIpAddrTable
function to sort the results, how are they sorted?
EVENT_SYSTEM_DESKTOPSWITCH
)PF_VIRT_FIRMWARE_ENABLED
return false even when virtualization is enabled in the firmware?
ChangeDisplaySettingsEx()
)GetRawInputDeviceList
function
GetRawInputDeviceList
function
PssCaptureSnapshot
? How fast is it? How much memory does it consume?
CreateExplorerShellUnelevatedTask
scheduled task?
STGMEDIUM
?
DEVICE_SCALE_FACTOR
)fd_set
, FD_SETSIZE
, and how it relates to WinSock
NLM_CONNECTIVITY
?
ShellExecuteEx
or IContextMenu
?