One of the things that is really annoying, is when somebody says something about the constitution and assumes it applies to the world. Not that that's what you did here, you just reminded me of it.
Would this "technical" documentation be available in locations outside of the jurisdiction of the DOJ or the Constitution, like Canada?
BC, most of what you say is true. But you make some statements that you know nothing about. Have you really read the whole SDK from top to bottom for any Windows version? Are you now on the MS payroll? You are starting to speak like their PR department.
I browsed the Apr 2000 snapshot for nearly 5 years; Accumulated a lot of random information through the KB articles, technical articles, backgrounders, etc.
And yes, certain portions of the documentation- namely the shell extensions portion - are written for people that want to create a shell extension.
A easy example is the documentation on Control Panel Applets. the documentation is geared towards somebody hosting Control Panel Applets; what one needs to do is
view the contract from the other side.
Just to be clear- I'm not debating wether IE6 uses undocumented functions; I'm debating wether there is any real way to tell wether a program is using undocumented functions or not.
Sure, we have dumpbin /exports; and dumpbin /imports; for internet explorer 7, I get the following from dumpbin /imports:
Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file iexplore.exe
File Type: EXECUTABLE IMAGE
Section contains the following imports:
ADVAPI32.dll
401000 Import Address Table
40F038 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
77CC7908 22A RegCloseKey
77CC765E 268 RegQueryValueExW
77CC7BA1 25B RegOpenKeyExW
77CA9850 24C RegEnumValueW
77CC80C3 24A RegEnumKeyW
77CB3D5A 278 RegSetValueExW
77CB41F1 233 RegCreateKeyExW
77CA3FB6 242 RegDeleteValueW
77CA38CD 23E RegDeleteKeyW
77CB48B4 262 RegQueryInfoKeyW
77CB32D4 269 RegQueryValueW
KERNEL32.dll
401030 Import Address Table
40F068 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
77F1140B 2B9 InitializeCriticalSection
77E3D300 3DA SetErrorMode
77E1A824 2AA HeapSetInformation
77E1A84F 420 SetUnhandledExceptionFilter
77F11B41 BF DeleteCriticalSection
77E19C80 171 GetCommandLineW
77E3ADF9 2FE LocalAlloc
77E36B51 109 ExpandEnvironmentStringsW
77E3AD76 302 LocalFree
77E3D555 8F CreateMutexW
77E3A6F9 1E7 GetLastError
77E2FB56 360 RaiseException
77E194DC 2F6 LoadLibraryA
77E39800 470 WaitForSingleObjectEx
77E110E8 7D CreateFileMappingW
77E2F333 1F3 GetLongPathNameW
77E09B95 1CC GetFileAttributesExW
77E17CC2 52 CompareFileTime
77E3A411 4B5 lstrcmpW
77E19362 2F9 LoadLibraryW
77E2FADC 2BA InitializeCriticalSectionAndSpinCount
77E1DC12 1A9 GetCurrentDirectoryW
77E397E0 46F WaitForSingleObject
77E0B93F 245 GetSystemDefaultLCID
77E39EC5 272 GetUserDefaultLCID
77F18AF0 DA EnterCriticalSection
77F18AB0 2F4 LeaveCriticalSection
77E33CA6 39F SearchPathW
77E37FA1 13A FindResourceW
77E30723 275 GetUserDefaultUILanguage
77DF701F 248 GetSystemDefaultUILanguage
77E33DB4 14D FreeLibrary
77E1A6E3 1EB GetLocaleInfoW
77E3AECB 80 CreateFileW
77E19109 2F8 LoadLibraryExW
77E369FD 139 FindResourceExW
77E36ADB 2FB LoadResource
77E8FD89 449 UnhandledExceptionFilter
77E3C905 1AA GetCurrentProcess
77DF18EF 438 TerminateProcess
77DF18C0 253 GetSystemTimeAsFileTime
77E39706 26A GetTickCount
77E3A660 359 QueryPerformanceCounter
77E392A5 1F7 GetModuleHandleA
77E30264 33F OutputDebugStringA
77DF1929 23D GetStartupInfoW
77E3943C 2BF InterlockedCompareExchange
77DF1C5D 42C Sleep
77E39428 2C2 InterlockedExchange
77E368F0 30F MapViewOfFile
77E3A651 1AB GetCurrentProcessId
77E37267 338 OpenProcess
77E3B65E 76 CreateEventW
77E399F0 1AE GetCurrentThreadId
77DF1BF3 98 CreateProcessW
77E3A6D8 46D WaitForMultipleObjects
77E3A995 44C UnmapViewOfFile
77E39A32 4C1 lstrlenW
77E3A804 1FA GetModuleHandleW
77E3903B 222 GetProcAddress
77E82467 3D3 SetDllDirectoryW
77E3A640 3F4 SetLastError
77E3AE8D 44 CloseHandle
77E39782 37D ReleaseMutex
77E13458 27B GetVersionExW
77E3B27E 1F6 GetModuleFileNameW
77E39BEB 56 CompareStringW
GDI32.dll
401140 Import Address Table
40F178 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
77B696B9 3E CreateFontIndirectW
77B67198 1E4 GetObjectW
77B65A37 D0 DeleteObject
USER32.dll
401150 Import Address Table
40F188 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
77D70AED 263 SendMessageW
77D60EA7 2F CharNextW
77D66B70 3A CharUpperW
77D67A5F 17A GetUserObjectInformationW
77D67A73 173 GetThreadDesktop
77D810B0 A6 DialogBoxParamW
77D72715 1BA IsDlgButtonChecked
77D5CD8B D1 EnableWindow
77D8326E D3 EndDialog
77D80F23 277 SetDlgItemTextW
77D5D472 11F GetDlgItem
77D69CCB 1E4 LoadStringW
77DAD6CF 1FF MessageBoxW
77D59B28 6 AllowSetForegroundWindow
77D80E38 25A SendDlgItemMessageW
77D690AA 155 GetParent
msvcrt.dll
401194 Import Address Table
40F1CC Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
708725BE E1 __wgetmainargs
70873D34 114 _cexit
708C95EE 162 _exit
708C3126 6A _XcptFilter
70873C08 48F exit
708FE600 3E7 _wcmdln
7086C4E6 1D5 _initterm
708C961D 101 _amsg_exit
708F566D D4 __setusermatherr
70901880 F5 _adjust_fdiv
70871790 B9 __p__commode
7087179B BE __p__fmode
708717F4 D2 __set_app_type
70869AC0 4EA memcpy
7086A048 4EC memmove
708B2F8E 37 ?terminate@@YAXXZ
7087097D 127 _controlfp
70869F69 3A6 _unlock
70869F85 242 _lock
70870D59 2EB _onexit
7086A13B 156 _errno
70869DF1 12 ??2@YAPAXI@Z
70869DE1 14 ??3@YAXPAX@Z
7086AEB1 564 wcsstr
70869860 4EE memset
7086ADCB 55B wcsncmp
7086B971 3CE _vsnwprintf
7086AC10 3EF _wcsicmp
7086A2C3 3F9 _wcsnicmp
7086B086 482 bsearch
7086B4CA 469 _wtoi
7086A23D 551 wcschr
7086F8D1 8D __dllonexit
ntdll.dll
40121C Import Address Table
40F254 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
77F09999 48B RtlUnwind
SHLWAPI.dll
401224 Import Address Table
40F25C Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
6E7C0B36 Ordinal 24
6E7BECA9 Ordinal 437
6E7C0075 84 PathRemoveFileSpecW
6E7C04F2 30 PathAppendW
6E7CDEC3 78 PathQuoteSpacesW
6E7BFE7B B9 SHGetValueW
6E7C1336 12A StrStrW
6E7B1063 134 UrlApplySchemeW
6E7A7C2E 13C UrlCreateFromPathW
6E7BB3FB 36 PathCombineW
6E7B4431 136 UrlCanonicalizeW
6E7E5751 Ordinal 462
6E7A87CF 6E PathIsURLW
6E7B7F69 2C PathAddBackslashW
6E7BF55D Ordinal 158
6E7B7ED3 B2 SHEnumValueW
6E7BFEA5 C8 SHQueryValueExW
6E7BECEB Ordinal 154
6E7BF2EA D3 SHRegGetValueW
6E7A873D E0 SHSetValueW
6E7B2556 12F StrToIntExW
6E7A2B73 AA SHDeleteKeyW
6E7B7EFE 98 PathUnquoteSpacesW
6E7BED97 44 PathFindFileNameW
SHELL32.dll
401288 Import Address Table
40F2C0 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
769711C4 Ordinal 147
7693F693 3 CommandLineToArgvW
ole32.dll
401294 Import Address Table
40F2CC Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
72C5035F 38 CoInitialize
72C6AF2E 60 CoTaskMemFree
72C6D271 64 CoUninitialize
72C69689 5F CoTaskMemAlloc
72C69EA6 F CoCreateInstance
72C69BFA 12D StringFromGUID2
72C4ED88 36 CoGetTreatAsClass
urlmon.dll
4012B4 Import Address Table
40F2EC Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
727017F9 Ordinal 111
iertutil.dll
4012BC Import Address Table
40F2F4 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
6E3124D0 Ordinal 81
6E311A5F Ordinal 85
6E311815 Ordinal 79
6E342FC0 Ordinal 28
6E31656A Ordinal 46
6E3116FE Ordinal 32
6E31450C Ordinal 44
6E31242F Ordinal 42
6E314232 Ordinal 11
6E31777A Ordinal 31
6E343A75 Ordinal 9
6E3118AC Ordinal 74
VERSION.dll
4012F0 Import Address Table
40F328 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
4ACE16A1 4 GetFileVersionInfoSizeW
4ACE19CE 5 GetFileVersionInfoW
4ACE19A2 D VerQueryValueW
Header contains the following bound import information:
Bound to ADVAPI32.dll [49E03717] Fri Apr 10 23:22:15 2009
Bound to KERNEL32.dll [49E037DD] Fri Apr 10 23:25:33 2009
Contained forwarders bound to NTDLL.DLL [49E03821] Fri Apr 10 23:26:41 2009
Bound to GDI32.dll [49E03728] Fri Apr 10 23:22:32 2009
Bound to USER32.dll [49E0380E] Fri Apr 10 23:26:22 2009
Bound to msvcrt.dll [49E0379E] Fri Apr 10 23:24:30 2009
Bound to NTDLL.DLL [49E03821] Fri Apr 10 23:26:41 2009
Bound to SHLWAPI.dll [49E037F1] Fri Apr 10 23:25:53 2009
Bound to SHELL32.dll [49E037EC] Fri Apr 10 23:25:48 2009
Bound to ole32.dll [49E037D7] Fri Apr 10 23:25:27 2009
Bound to urlmon.dll [49E03809] Fri Apr 10 23:26:17 2009
Bound to iertutil.dll [49E03758] Fri Apr 10 23:23:20 2009
Bound to VERSION.dll [49E03812] Fri Apr 10 23:26:26 2009
Section contains the following delay load imports:
IEFRAME.dll
00000001 Characteristics
004101C0 Address of HMODULE
00410000 Import Address Table
0040EE8C Import Name Table
00000000 Bound Import Name Table
00000000 Unload Import Name Table
0 time date stamp
004048C9 Ordinal 101
004048E0 Ordinal 159
MLANG.dll
00000001 Characteristics
004101C4 Address of HMODULE
0041000C Import Address Table
0040EE98 Import Name Table
00000000 Bound Import Name Table
00000000 Unload Import Name Table
0 time date stamp
0040E90C Ordinal 123
0040E8E4 Ordinal 121
Summary
2000 .data
1000 .reloc
89000 .rsrc
F000 .text
It would appear, that genuinely speaking, internet explorer 7 uses undocumented functions. Here's one example:
SHELL32.dll
401288 Import Address Table
40F2C0 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference
769711C4 Ordinal 147
7693F693 3 CommandLineToArgvW
It's importing ordinal 147 from shell32.dll; now, the question is- does this mean the routine is undocumented?
Actually- it IS documented. ordinal 147 of Shell32.dll is SHCLSIDFromString(), and it performs the exact same function as CLSIDFromString() (but with something common in the undocumented shell32 and shdocvw functions- no argument checking. They were undocumented for a reason.
I'm sure you'll find this site interesting; lists a good number of undocumented routines in any number of Windows libraries:
http://www.geoffchappell.com/viewer.htm?doc=studies/windows/shell/index.htm&tx=39It appears tyo be written in a Microsoft Necrostic... is Necrostic a word? I'm thinking, biassed against them. On the other hand, it does reveal a few interesting morsels. Let me examine one undocumented feature I found interesting.
The Listview Control (which can be used by any number of applications) stores some view data in:
* HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
* HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Any Listview control will load this data when it is created, or it received a WM_SETTINGSCHANGE message. There is, a caveat, as the author explains- when used as a control- the parent window will have to forward this message to the listview control. MS documents the forwarding of WM_SYSCOLORCHANGE, but makes no mention of the SETTINGSCHANGE message. He goes on to state that:
Yet the consequences of not forwarding either message are similar. Suppose for example that a user clears the “Use a background image for each folder type” setting while a List-View control shows a watermark. If the control’s parent forwards the WM_SETTINGCHANGED message, then the watermark disappears in accordance with the user’s wishes. Without forwarding, the watermark remains.
Understandable, but at the same time; the "Folder options" dialog is used for Windows Explorer folder windows; what about listviews that display other data? Should the folder options dialog affect them as well? I won't debate wether it is undocumented, and it certainly should, but realistically speaking he overstates the consequences of this one.
One of my main problems with the whole movement is that the majority of the "undocumented" functions are things like SHCanonicalizepath, and SHAppendPath, and any number if similar routines that are *censored* near useless. They are basic string manipulation for pete's sake. There are some that are simply aliases for already documented routines. For example-
the "ShellDesktop" function returns a desktop object. This routine is clearly an alias for using ParseDisplayName on the root IFolder with the Desktop CLSID, which is documented (heck, I use it from VB6)