Synchronize with trunk revision 59781.
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 19 Aug 2013 18:55:28 +0000 (18:55 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 19 Aug 2013 18:55:28 +0000 (18:55 +0000)
svn path=/branches/ntvdm/; revision=59784

80 files changed:
base/setup/usetup/bootsup.c
base/system/services/database.c
boot/bootdata/hivesys.inf
boot/freeldr/freeldr/comm/rs232.c
boot/freeldr/freeldr/windows/headless.c
boot/freeldr/freeldr/windows/winldr.c
cmake/gcc.cmake
dll/ntdll/csr/connect.c
dll/opengl/glu32/CMakeLists.txt
dll/opengl/glu32/glu32.rc [new file with mode: 0644]
dll/win32/kernel32/client/console/init.c
dll/win32/kernel32/client/dosdev.c
dll/win32/kernel32/client/file/filename.c
dll/win32/kernel32/client/job.c
dll/win32/kernel32/client/proc.c
dll/win32/kernel32/client/vdm.c
dll/win32/kernel32/k32.h
dll/win32/netapi32/user.c
dll/win32/samlib/samlib.c
dll/win32/samsrv/samrpc.c
dll/win32/samsrv/user.c
drivers/base/kdcom/kdcom.c
drivers/sac/driver/chanmgr.c
drivers/sac/driver/channel.c
drivers/sac/driver/concmd.c
drivers/sac/driver/conmgr.c
drivers/sac/driver/data.c
drivers/sac/driver/dispatch.c
drivers/sac/driver/memory.c
drivers/sac/driver/rawchan.c
drivers/sac/driver/sacdrv.h
drivers/sac/driver/util.c
drivers/sac/driver/vtutf8chan.c
include/crt/mbstring.h
include/crt/sec_api/conio_s.h
include/crt/sec_api/mbstring_s.h
include/crt/sec_api/string_s.h
include/psdk/cfgmgr32.h
include/psdk/commctrl.h
include/psdk/dbghelp.h
include/psdk/ks.h
include/psdk/msi.h
include/psdk/objbase.h
include/psdk/oleauto.h
include/psdk/oledlg.h
include/psdk/sal.h
include/psdk/shellapi.h
include/psdk/shlobj.h
include/psdk/shlwapi.h
include/psdk/shlwapi_undoc.h
include/psdk/wincon.h
include/psdk/winsock.h
include/psdk/ws2spi.h
include/psdk/ws2tcpip.h
include/reactos/libs/cportlib/cportlib.h
include/reactos/mc/CMakeLists.txt
include/reactos/mc/sacmsg.mc
include/reactos/subsys/csr/csrmsg.h
include/reactos/subsys/win/basemsg.h
include/reactos/subsys/win/conmsg.h
lib/cportlib/cport.c
lib/rtl/process.c
ntoskrnl/ex/hdlsterm.c
ntoskrnl/inbv/inbvport.c
ntoskrnl/include/internal/hdl.h
ntoskrnl/include/internal/inbv.h
ntoskrnl/kd/i386/kdbg.c
ntoskrnl/rtl/misc.c
subsystems/win/basesrv/dosdev.c
subsystems/win/basesrv/proc.c
subsystems/win/basesrv/vdm.c [new file with mode: 0644]
subsystems/win32/csrsrv/api.c
subsystems/win32/csrsrv/api.h
subsystems/win32/csrsrv/server.c
win32ss/gdi/ntgdi/freetype.c
win32ss/user/ntuser/desktop.h
win32ss/user/ntuser/main.c
win32ss/user/ntuser/ntuser.h
win32ss/user/ntuser/usrheap.c
win32ss/user/winsrv/consrv/init.c

index 0c05cbb..9865e26 100644 (file)
@@ -501,8 +501,14 @@ CreateFreeLoaderIniForReactos(
     /* ReactOS_Ram */
     CreateFreeLoaderEntry(IniCache, IniSection,
                           L"ReactOS_Ram", L"\"ReactOS (RAM Disk)\"",
-                          L"ReactOS", L"ramdisk(0)\\ReactOS",
+                          L"Windows2003", L"ramdisk(0)\\ReactOS",
                           L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /RDIMAGEPATH=reactos.img /RDIMAGEOFFSET=32256");
+
+    /* ReactOS_EMS */
+    CreateFreeLoaderEntry(IniCache, IniSection,
+                          L"ReactOS_EMS", L"\"ReactOS (Emergency Management Services)\"",
+                          L"Windows2003", ArcPath,
+                          L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /redirect=com2 /redirectbaudrate=115200");
 #endif
 
     /* Save the ini file */
index 2440c6a..a5c24d2 100644 (file)
@@ -956,7 +956,7 @@ ScmControlService(PSERVICE Service,
                 dwError = ERROR_SERVICE_REQUEST_TIMEOUT;
                 goto Done;
             }
-            else if (dwError == ERROR_SUCCESS)
+            else if (dwError == WAIT_OBJECT_0)
             {
                 bResult = GetOverlappedResult(Service->lpImage->hControlPipe,
                                               &Overlapped,
@@ -1010,7 +1010,7 @@ ScmControlService(PSERVICE Service,
                 dwError = ERROR_SERVICE_REQUEST_TIMEOUT;
                 goto Done;
             }
-            else if (dwError == ERROR_SUCCESS)
+            else if (dwError == WAIT_OBJECT_0)
             {
                 bResult = GetOverlappedResult(Service->lpImage->hControlPipe,
                                               &Overlapped,
@@ -1207,7 +1207,7 @@ ScmSendStartCommand(PSERVICE Service,
                 dwError = ERROR_SERVICE_REQUEST_TIMEOUT;
                 goto Done;
             }
-            else if (dwError == ERROR_SUCCESS)
+            else if (dwError == WAIT_OBJECT_0)
             {
                 bResult = GetOverlappedResult(Service->lpImage->hControlPipe,
                                               &Overlapped,
@@ -1261,7 +1261,7 @@ ScmSendStartCommand(PSERVICE Service,
                 dwError = ERROR_SERVICE_REQUEST_TIMEOUT;
                 goto Done;
             }
-            else if (dwError == ERROR_SUCCESS)
+            else if (dwError == WAIT_OBJECT_0)
             {
                 bResult = GetOverlappedResult(Service->lpImage->hControlPipe,
                                               &Overlapped,
@@ -1425,9 +1425,9 @@ ScmWaitForServiceConnect(PSERVICE Service)
 
                 return ERROR_SERVICE_REQUEST_TIMEOUT;
             }
-            else if (dwError == ERROR_SUCCESS)
+            else if (dwError == WAIT_OBJECT_0)
             {
-                DPRINT("WaitForSingleObject() returned ERROR_SUCCESS\n");
+                DPRINT("WaitForSingleObject() returned WAIT_OBJECT_0\n");
 
                 DPRINT("Process Id: %lu\n", dwProcessId);
 
index 5c5f94e..751e1df 100644 (file)
@@ -1345,11 +1345,11 @@ HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Type",0x00010001,0x00000020
 HKLM,"SYSTEM\CurrentControlSet\Services\DHCP\Parameters","ServiceDll",0x00020000,"%SystemRoot%\system32\dhcpcsvc.dll"
 
 ; EMS Serial Administration Console Driver
-HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","ErrorControl",0x00010001,0x00000000
-HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","Group",0x00000000,"EMS"
-HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","ImagePath",0x00020000,"system32\drivers\sacdrv.sys"
-HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","Start",0x00010001,0x00000000
-HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","Type",0x00010001,0x00000001
+HKLM,"SYSTEM\CurrentControlSet\Services\sacdrv","ErrorControl",0x00010001,0x00000000
+HKLM,"SYSTEM\CurrentControlSet\Services\sacdrv","Group",0x00000000,"EMS"
+HKLM,"SYSTEM\CurrentControlSet\Services\sacdrv","ImagePath",0x00020000,"system32\drivers\sacdrv.sys"
+HKLM,"SYSTEM\CurrentControlSet\Services\sacdrv","Start",0x00010001,0x00000000
+HKLM,"SYSTEM\CurrentControlSet\Services\sacdrv","Type",0x00010001,0x00000001
 
 ; Event logging service
 HKLM,"SYSTEM\CurrentControlSet\Services\EventLog",,0x00000010
index 347ca09..7f0d9d8 100644 (file)
@@ -100,7 +100,7 @@ BOOLEAN Rs232PortGetByte(PUCHAR ByteReceived)
     if (PortInitialized == FALSE)
         return FALSE;
 
-    return (CpGetByte(&Rs232ComPort, ByteReceived, TRUE) == CP_GET_SUCCESS);
+    return (CpGetByte(&Rs232ComPort, ByteReceived, TRUE, FALSE) == CP_GET_SUCCESS);
 }
 
 /*
index 8f3a7a4..515593a 100644 (file)
@@ -143,7 +143,7 @@ BOOLEAN
 WinLdrPortGetByte(IN ULONG PortId,
                   OUT PUCHAR Data)
 {
-    return CpGetByte(&Port[PortId], Data, TRUE) == CP_GET_SUCCESS;
+    return CpGetByte(&Port[PortId], Data, TRUE, FALSE) == CP_GET_SUCCESS;
 }
 
 BOOLEAN
@@ -151,7 +151,7 @@ WinLdrPortPollOnly(IN ULONG PortId)
 {
     UCHAR Dummy;
 
-    return CpGetByte(&Port[PortId], &Dummy, FALSE) == CP_GET_SUCCESS;
+    return CpGetByte(&Port[PortId], &Dummy, FALSE, TRUE) == CP_GET_SUCCESS;
 }
 
 VOID
@@ -246,7 +246,8 @@ WinLdrSetupEms(IN PCHAR BootOptions)
 
     /* Start fresh */
     RtlZeroMemory(&LoaderRedirectionInformation, sizeof(HEADLESS_LOADER_BLOCK));
-        
+    LoaderRedirectionInformation.PciDeviceId = PCI_INVALID_VENDORID;
+
     /* Use a direction port if one was given, or use ACPI to detect one instead */
     RedirectPort = strstr(BootOptions, "/redirect=");
 
@@ -257,6 +258,7 @@ WinLdrSetupEms(IN PCHAR BootOptions)
         {
             RedirectPort += sizeof("com") - 1;
             LoaderRedirectionInformation.PortNumber = atoi(RedirectPort);
+            LoaderRedirectionInformation.TerminalType = 1; //HeadlessSerialPort
         }
         else
         {
index fec79d9..6163933 100644 (file)
@@ -673,11 +673,6 @@ LoadAndBootWindows(IN OperatingSystemItem* OperatingSystem,
     /* Allocate and minimalistic-initialize LPB */
     AllocateAndInitLPB(&LoaderBlock);
 
-#ifdef _M_IX86
-    /* Setup redirection support */
-    WinLdrSetupEms(BootOptions);
-#endif
-
     /* Load Hive */
     UiDrawBackdrop();
     UiDrawProgressBarCenter(15, 100, "Loading system hive...");
@@ -711,6 +706,11 @@ LoadAndBootWindowsCommon(
     LPCSTR SystemRoot;
     TRACE("LoadAndBootWindowsCommon()\n");
 
+#ifdef _M_IX86
+    /* Setup redirection support */
+    WinLdrSetupEms((PCHAR)BootOptions);
+#endif
+
     /* Convert BootPath to SystemRoot */
     SystemRoot = strstr(BootPath, "\\");
 
index 1f22160..4c38727 100644 (file)
@@ -143,16 +143,16 @@ else()
     get_target_property(RSYM native-rsym IMPORTED_LOCATION_NOCONFIG)
     set(CMAKE_C_LINK_EXECUTABLE
         "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>"
-        "${RSYM} <TARGET> <TARGET>")
+        "${RSYM} -s ${REACTOS_SOURCE_DIR} <TARGET> <TARGET>")
     set(CMAKE_CXX_LINK_EXECUTABLE
         "<CMAKE_CXX_COMPILER> ${CMAKE_CXX_FLAGS} <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>"
-        "${RSYM} <TARGET> <TARGET>")
+        "${RSYM} -s ${REACTOS_SOURCE_DIR} <TARGET> <TARGET>")
     set(CMAKE_C_CREATE_SHARED_LIBRARY
         "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
-        "${RSYM} <TARGET> <TARGET>")
+        "${RSYM} -s ${REACTOS_SOURCE_DIR} <TARGET> <TARGET>")
     set(CMAKE_CXX_CREATE_SHARED_LIBRARY
         "<CMAKE_CXX_COMPILER> ${CMAKE_CXX_FLAGS} <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
-        "${RSYM} <TARGET> <TARGET>")
+        "${RSYM} -s ${REACTOS_SOURCE_DIR} <TARGET> <TARGET>")
     set(CMAKE_RC_CREATE_SHARED_LIBRARY
         "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 endif()
index a7bf85a..bf89f90 100644 (file)
@@ -44,8 +44,8 @@ CsrpConnectToServer(IN PWSTR ObjectDirectory)
     SECURITY_QUALITY_OF_SERVICE SecurityQos;
     SID_IDENTIFIER_AUTHORITY NtSidAuthority = {SECURITY_NT_AUTHORITY};
     PSID SystemSid = NULL;
-    CSR_CONNECTION_INFO ConnectionInfo;
-    ULONG ConnectionInfoLength = sizeof(CSR_CONNECTION_INFO);
+    CSR_API_CONNECTINFO ConnectionInfo;
+    ULONG ConnectionInfoLength = sizeof(CSR_API_CONNECTINFO);
 
     DPRINT("%s(%S)\n", __FUNCTION__, ObjectDirectory);
 
@@ -107,7 +107,7 @@ CsrpConnectToServer(IN PWSTR ObjectDirectory)
     SecurityQos.EffectiveOnly = TRUE;
 
     /* Setup the connection info */
-    ConnectionInfo.Version = 0x10000;
+    ConnectionInfo.Version = CSRSRV_VERSION;
 
     /* Create a SID for us */
     Status = RtlAllocateAndInitializeSid(&NtSidAuthority,
index 8df5de4..99a8fa3 100644 (file)
@@ -18,6 +18,7 @@ add_definitions(
 spec2def(glu32.dll glu32.spec ADD_IMPORTLIB)
 
 list(APPEND SOURCE
+    glu32.rc
     src/libutil/error.c
     src/libutil/glue.c
     src/libutil/mipmap.c
diff --git a/dll/opengl/glu32/glu32.rc b/dll/opengl/glu32/glu32.rc
new file mode 100644 (file)
index 0000000..6c183eb
--- /dev/null
@@ -0,0 +1,5 @@
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION   "ReactOS OpenGL Utility Library\0"
+#define REACTOS_STR_INTERNAL_NAME      "glu32\0"
+#define REACTOS_STR_ORIGINAL_FILENAME  "glu32.dll\0"
+#include <reactos/version.rc>
index a8735ae..55e8d64 100644 (file)
@@ -175,7 +175,7 @@ BasepInitConsole(VOID)
     ULONG SessionId = NtCurrentPeb()->SessionId;
     BOOLEAN InServer;
 
-    CONSOLE_CONNECTION_INFO ConnectInfo;
+    CONSRV_API_CONNECTINFO ConnectInfo;
     ULONG ConnectInfoSize = sizeof(ConnectInfo);
 
     DPRINT("BasepInitConsole for : %wZ\n", &Parameters->ImagePathName);
index bf6c991..a7a7aba 100644 (file)
@@ -157,7 +157,7 @@ DefineDosDeviceW(
     }
     else
     {
-        DefineDosDeviceRequest->dwFlags = dwFlags;
+        DefineDosDeviceRequest->Flags = dwFlags;
 
         CsrCaptureMessageBuffer(CaptureBuffer,
                                 (PVOID)DeviceUpcaseNameU.Buffer,
@@ -174,11 +174,11 @@ DefineDosDeviceW(
             CsrCaptureMessageBuffer(CaptureBuffer,
                                     (PVOID)NtTargetPathU.Buffer,
                                     NtTargetPathU.Length,
-                                    (PVOID*)&DefineDosDeviceRequest->TargetName.Buffer);
+                                    (PVOID*)&DefineDosDeviceRequest->TargetPath.Buffer);
         }
-        DefineDosDeviceRequest->TargetName.Length =
+        DefineDosDeviceRequest->TargetPath.Length =
             NtTargetPathU.Length;
-        DefineDosDeviceRequest->TargetName.MaximumLength =
+        DefineDosDeviceRequest->TargetPath.MaximumLength =
             NtTargetPathU.Length;
 
         Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
index 0fe7449..cf13a5c 100644 (file)
@@ -92,7 +92,7 @@ GetTempFileNameW(IN LPCWSTR lpPathName,
     CHAR IDString[5];
     WCHAR * TempFileName;
     BASE_API_MESSAGE ApiMessage;
-    PBASE_GET_TEMP_FILE GetTempFile = &ApiMessage.Data.GetTempFile;
+    PBASE_GET_TEMP_FILE GetTempFile = &ApiMessage.Data.GetTempFileRequest;
     DWORD FileAttributes, LastError;
     UNICODE_STRING PathNameString, PrefixString;
     static const WCHAR Ext[] = { L'.', 't', 'm', 'p', UNICODE_NULL };
index cdefe61..6701ea6 100644 (file)
@@ -11,6 +11,7 @@
 /* INCLUDES *******************************************************************/
 
 #include <k32.h>
+#include <winspool.h>
 
 #define NDEBUG
 #include <debug.h>
index bb2bda4..7c015d2 100644 (file)
@@ -963,13 +963,13 @@ GetProcessShutdownParameters(OUT LPDWORD lpdwLevel,
 {
     NTSTATUS Status;
     BASE_API_MESSAGE ApiMessage;
-    PBASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest = &ApiMessage.Data.GetShutdownParametersRequest;
+    PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &ApiMessage.Data.ShutdownParametersRequest;
 
     /* Ask CSRSS for shutdown information */
     Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
                                  CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepGetProcessShutdownParam),
-                                 sizeof(BASE_GET_PROCESS_SHUTDOWN_PARAMS));
+                                 sizeof(BASE_GETSET_PROCESS_SHUTDOWN_PARAMS));
     if (!NT_SUCCESS(Status))
     {
         /* Return the failure from CSRSS */
@@ -978,8 +978,8 @@ GetProcessShutdownParameters(OUT LPDWORD lpdwLevel,
     }
 
     /* Get the data back */
-    *lpdwLevel = GetShutdownParametersRequest->Level;
-    *lpdwFlags = GetShutdownParametersRequest->Flags;
+    *lpdwLevel = ShutdownParametersRequest->ShutdownLevel;
+    *lpdwFlags = ShutdownParametersRequest->ShutdownFlags;
     return TRUE;
 }
 
@@ -993,15 +993,15 @@ SetProcessShutdownParameters(IN DWORD dwLevel,
 {
     NTSTATUS Status;
     BASE_API_MESSAGE ApiMessage;
-    PBASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest = &ApiMessage.Data.SetShutdownParametersRequest;
+    PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &ApiMessage.Data.ShutdownParametersRequest;
 
     /* Write the data into the CSRSS request and send it */
-    SetShutdownParametersRequest->Level = dwLevel;
-    SetShutdownParametersRequest->Flags = dwFlags;
+    ShutdownParametersRequest->ShutdownLevel = dwLevel;
+    ShutdownParametersRequest->ShutdownFlags = dwFlags;
     Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
                                  CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepSetProcessShutdownParam),
-                                 sizeof(BASE_SET_PROCESS_SHUTDOWN_PARAMS));
+                                 sizeof(BASE_GETSET_PROCESS_SHUTDOWN_PARAMS));
     if (!NT_SUCCESS(Status))
     {
         /* Return the failure from CSRSS */
@@ -2426,7 +2426,7 @@ CreateProcessInternalW(IN HANDLE hUserToken,
 
     /* Set message structures */
     CreateProcessMsg = &CsrMsg.Data.CreateProcessRequest;
-    VdmMsg = &CsrMsg.Data.CheckVdm;
+    VdmMsg = &CsrMsg.Data.CheckVDMRequest;
 
     /* Clear the more complex structures by zeroing out their entire memory */
     RtlZeroMemory(&Context, sizeof(Context));
index 69a7010..11528b0 100644 (file)
@@ -2,7 +2,7 @@
  * PROJECT:         ReactOS Win32 Base API
  * LICENSE:         GPL - See COPYING in the top level directory
  * FILE:            dll/win32/kernel32/client/vdm.c
- * PURPOSE:         Virtual Dos Machine (VDM) Support
+ * PURPOSE:         Virtual DOS Machines (VDM) Support
  * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
  */
 
@@ -49,17 +49,18 @@ BaseIsDosApplication(IN PUNICODE_STRING PathName,
     /* Is it a .com? */
     String.Length = BaseDotComSuffixName.Length;
     String.Buffer = &PathName->Buffer[(PathName->Length - String.Length) / sizeof(WCHAR)];
-    if (RtlEqualUnicodeString(&String, &BaseDotComSuffixName, TRUE)) return 2;
+    if (RtlEqualUnicodeString(&String, &BaseDotComSuffixName, TRUE)) return BINARY_TYPE_COM;
 
     /* Is it a .pif? */
     String.Length = BaseDotPifSuffixName.Length;
     String.Buffer = &PathName->Buffer[(PathName->Length - String.Length) / sizeof(WCHAR)];
-    if (RtlEqualUnicodeString(&String, &BaseDotPifSuffixName, TRUE)) return 3;
+    if (RtlEqualUnicodeString(&String, &BaseDotPifSuffixName, TRUE)) return BINARY_TYPE_PIF;
 
     /* Is it an exe? */
     String.Length = BaseDotExeSuffixName.Length;
     String.Buffer = &PathName->Buffer[(PathName->Length - String.Length) / sizeof(WCHAR)];
-    if (RtlEqualUnicodeString(&String, &BaseDotExeSuffixName, TRUE)) return 1;
+    if (RtlEqualUnicodeString(&String, &BaseDotExeSuffixName, TRUE)) return BINARY_TYPE_EXE;
+
     return 0;
 }
 
index 460b000..fe122ae 100644 (file)
@@ -20,7 +20,6 @@
 #include <winreg.h>
 #include <wincon.h>
 #include <winuser.h>
-#include <winspool.h>
 #include <tlhelp32.h>
 
 /* Redefine NTDDI_VERSION to 2K3 SP1 to get correct NDK definitions */
index dcd313d..3840b68 100644 (file)
@@ -20,7 +20,7 @@
 
 /*
  *  TODO:
- *    Implement NetUserGetGroups
+ *    Implement NetUserGetGroups (WIP)
  *    Implement NetUserSetGroups
  *    NetUserGetLocalGroups does not support LG_INCLUDE_INDIRECT yet.
  *    Add missing information levels.
@@ -2056,7 +2056,7 @@ NetUserAdd(LPCWSTR servername,
     /* Open the Account Domain */
     Status = OpenAccountDomain(ServerHandle,
                                (servername != NULL) ? &ServerName : NULL,
-                               DOMAIN_CREATE_USER | DOMAIN_LOOKUP,
+                               DOMAIN_CREATE_USER | DOMAIN_LOOKUP | DOMAIN_READ_PASSWORD_PARAMETERS,
                                &DomainHandle);
     if (!NT_SUCCESS(Status))
     {
@@ -2621,15 +2621,160 @@ NetUserGetGroups(LPCWSTR servername,
                  LPDWORD entriesread,
                  LPDWORD totalentries)
 {
-    FIXME("%s %s %d %p %d %p %p stub\n", debugstr_w(servername),
+    UNICODE_STRING ServerName;
+    UNICODE_STRING UserName;
+    SAM_HANDLE ServerHandle = NULL;
+    SAM_HANDLE AccountDomainHandle = NULL;
+    SAM_HANDLE UserHandle = NULL;
+    PSID AccountDomainSid = NULL;
+    PULONG RelativeIds = NULL;
+    PSID_NAME_USE Use = NULL;
+    PGROUP_MEMBERSHIP GroupMembership = NULL;
+    ULONG GroupCount;
+
+    NET_API_STATUS ApiStatus = NERR_Success;
+    NTSTATUS Status = STATUS_SUCCESS;
+
+    TRACE("%s %s %d %p %d %p %p stub\n", debugstr_w(servername),
           debugstr_w(username), level, bufptr, prefixmaxlen, entriesread,
           totalentries);
 
+    if (servername != NULL)
+        RtlInitUnicodeString(&ServerName, servername);
+
+    RtlInitUnicodeString(&UserName, username);
+
+    /* Connect to the SAM Server */
+    Status = SamConnect((servername != NULL) ? &ServerName : NULL,
+                        &ServerHandle,
+                        SAM_SERVER_CONNECT | SAM_SERVER_LOOKUP_DOMAIN,
+                        NULL);
+    if (!NT_SUCCESS(Status))
+    {
+        ERR("SamConnect failed (Status %08lx)\n", Status);
+        ApiStatus = NetpNtStatusToApiStatus(Status);
+        goto done;
+    }
+
+    /* Get the Account Domain SID */
+    Status = GetAccountDomainSid((servername != NULL) ? &ServerName : NULL,
+                                 &AccountDomainSid);
+    if (!NT_SUCCESS(Status))
+    {
+        ERR("GetAccountDomainSid failed (Status %08lx)\n", Status);
+        ApiStatus = NetpNtStatusToApiStatus(Status);
+        goto done;
+    }
+
+    /* Open the Account Domain */
+    Status = SamOpenDomain(ServerHandle,
+                           DOMAIN_LOOKUP | DOMAIN_GET_ALIAS_MEMBERSHIP,
+                           AccountDomainSid,
+                           &AccountDomainHandle);
+    if (!NT_SUCCESS(Status))
+    {
+        ERR("OpenAccountDomain failed (Status %08lx)\n", Status);
+        ApiStatus = NetpNtStatusToApiStatus(Status);
+        goto done;
+    }
+
+    /* Get the RID for the given user name */
+    Status = SamLookupNamesInDomain(AccountDomainHandle,
+                                    1,
+                                    &UserName,
+                                    &RelativeIds,
+                                    &Use);
+    if (!NT_SUCCESS(Status))
+    {
+        ERR("SamLookupNamesInDomain failed (Status %08lx)\n", Status);
+        ApiStatus = NetpNtStatusToApiStatus(Status);
+        goto done;
+    }
+
+    /* Fail, if it is not a user account */
+    if (Use[0] != SidTypeUser)
+    {
+        ERR("Account is not a User!\n");
+        ApiStatus = NERR_UserNotFound;
+        goto done;
+    }
+
+    /* Open the user object */
+    Status = SamOpenUser(AccountDomainHandle,
+                         USER_LIST_GROUPS,
+                         RelativeIds[0],
+                         &UserHandle);
+    if (!NT_SUCCESS(Status))
+    {
+        ERR("SamOpenUser failed (Status %08lx)\n", Status);
+        ApiStatus = NetpNtStatusToApiStatus(Status);
+        goto done;
+    }
+
+    /* Get the group memberships of this user */
+    Status = SamGetGroupsForUser(UserHandle,
+                                 &GroupMembership,
+                                 &GroupCount);
+    if (!NT_SUCCESS(Status))
+    {
+        ERR("SamGetGroupsForUser failed (Status %08lx)\n", Status);
+        ApiStatus = NetpNtStatusToApiStatus(Status);
+        goto done;
+    }
+
+    /* If there is no group membership, we're done */
+    if (GroupCount == 0)
+    {
+        ApiStatus = NERR_Success;
+        goto done;
+    }
+
+
+done:
+
+    if (GroupMembership != NULL)
+        SamFreeMemory(GroupMembership);
+
+    if (UserHandle != NULL)
+        SamCloseHandle(UserHandle);
+
+    if (RelativeIds != NULL)
+        SamFreeMemory(RelativeIds);
+
+    if (Use != NULL)
+        SamFreeMemory(Use);
+
+    if (AccountDomainSid != NULL)
+        RtlFreeHeap(RtlGetProcessHeap(), 0, AccountDomainSid);
+
+    if (AccountDomainHandle != NULL)
+        SamCloseHandle(AccountDomainHandle);
+
+    if (ServerHandle != NULL)
+        SamCloseHandle(ServerHandle);
+
+    if (ApiStatus != NERR_Success && ApiStatus != ERROR_MORE_DATA)
+    {
+        *entriesread = 0;
+        *totalentries = 0;
+    }
+    else
+    {
+//        *entriesread = Count;
+//        *totalentries = Count;
+    }
+
+//    *bufptr = (LPBYTE)Buffer;
+
+    return ApiStatus;
+
+#if 0
     *bufptr = NULL;
     *entriesread = 0;
     *totalentries = 0;
 
     return ERROR_INVALID_LEVEL;
+#endif
 }
 
 
index 961e2a5..471de04 100644 (file)
@@ -1847,7 +1847,7 @@ SamSetInformationUser(IN SAM_HANDLE UserHandle,
 {
     PSAMPR_USER_SET_PASSWORD_INFORMATION PasswordBuffer;
     SAMPR_USER_INTERNAL1_INFORMATION Internal1Buffer;
-    PUSER_ALL_INFORMATION AllBuffer;
+    USER_ALL_INFORMATION InternalAllBuffer;
     OEM_STRING LmPwdString;
     CHAR LmPwdBuffer[15];
     NTSTATUS Status;
@@ -1914,23 +1914,118 @@ SamSetInformationUser(IN SAM_HANDLE UserHandle,
         if (!NT_SUCCESS(Status))
         {
             TRACE("SamrSetInformation() failed (Status 0x%08lx)\n", Status);
-            return Status;
         }
+
+        return Status;
     }
     else if (UserInformationClass == UserAllInformation)
     {
-        AllBuffer = (PUSER_ALL_INFORMATION)Buffer;
+        RtlCopyMemory(&InternalAllBuffer,
+                      Buffer,
+                      sizeof(USER_ALL_INFORMATION));
 
-        if (AllBuffer->WhichFields & (USER_ALL_LMPASSWORDPRESENT | USER_ALL_NTPASSWORDPRESENT))
+        if (InternalAllBuffer.WhichFields & (USER_ALL_LMPASSWORDPRESENT | USER_ALL_NTPASSWORDPRESENT))
         {
-            Status = SampCheckPassword(UserHandle,
-                                       &AllBuffer->NtPassword);
-            if (!NT_SUCCESS(Status))
+            if (InternalAllBuffer.WhichFields & USER_ALL_OWFPASSWORD)
             {
-                TRACE("SampCheckPassword failed (Status 0x%08lx)\n", Status);
-                return Status;
+                /* Check NT password hash */
+                if (InternalAllBuffer.WhichFields & USER_ALL_NTPASSWORDPRESENT)
+                {
+                    if (InternalAllBuffer.NtPassword.Length != sizeof(ENCRYPTED_NT_OWF_PASSWORD))
+                        return STATUS_INVALID_PARAMETER;
+                }
+
+                /* Check LM password hash */
+                if (InternalAllBuffer.WhichFields & USER_ALL_LMPASSWORDPRESENT)
+                {
+                    if (InternalAllBuffer.LmPassword.Length != sizeof(ENCRYPTED_LM_OWF_PASSWORD))
+                        return STATUS_INVALID_PARAMETER;
+                }
             }
+            else
+            {
+                /*
+                 * Only allow the NT password to be set.
+                 * The LM password will be created here.
+                 */
+                if (InternalAllBuffer.WhichFields & USER_ALL_LMPASSWORDPRESENT)
+                {
+                    TRACE("Do not try to set a clear text LM password!\n");
+                    return STATUS_INVALID_PARAMETER;
+                }
+
+                if (InternalAllBuffer.WhichFields & USER_ALL_NTPASSWORDPRESENT)
+                {
+                    Status = SampCheckPassword(UserHandle,
+                                               &InternalAllBuffer.NtPassword);
+                    if (!NT_SUCCESS(Status))
+                    {
+                        TRACE("SampCheckPassword failed (Status 0x%08lx)\n", Status);
+                        return Status;
+                    }
+
+                    /* Calculate the NT password hash */
+                    Status = SystemFunction007((PUNICODE_STRING)&InternalAllBuffer.NtPassword,
+                                               (LPBYTE)&Internal1Buffer.EncryptedNtOwfPassword);
+                    if (!NT_SUCCESS(Status))
+                    {
+                        TRACE("SystemFunction007 failed (Status 0x%08lx)\n", Status);
+                        return Status;
+                    }
+
+                    InternalAllBuffer.NtPasswordPresent = TRUE;
+                    InternalAllBuffer.LmPasswordPresent = FALSE;
+
+                    InternalAllBuffer.NtPassword.Length = sizeof(ENCRYPTED_NT_OWF_PASSWORD);
+                    InternalAllBuffer.NtPassword.MaximumLength = sizeof(ENCRYPTED_NT_OWF_PASSWORD);
+                    InternalAllBuffer.NtPassword.Buffer = (LPWSTR)&Internal1Buffer.EncryptedNtOwfPassword;
+
+                    /* Build the LM password */
+                    LmPwdString.Length = 15;
+                    LmPwdString.MaximumLength = 15;
+                    LmPwdString.Buffer = LmPwdBuffer;
+                    ZeroMemory(LmPwdString.Buffer, LmPwdString.MaximumLength);
+
+                    Status = RtlUpcaseUnicodeStringToOemString(&LmPwdString,
+                                                               (PUNICODE_STRING)&InternalAllBuffer.NtPassword,
+                                                               FALSE);
+                    if (NT_SUCCESS(Status))
+                    {
+                        /* Calculate the LM password hash */
+                        Status = SystemFunction006(LmPwdString.Buffer,
+                                                   (LPSTR)&Internal1Buffer.EncryptedLmOwfPassword);
+                        if (NT_SUCCESS(Status))
+                        {
+                            InternalAllBuffer.WhichFields |= USER_ALL_LMPASSWORDPRESENT;
+                            InternalAllBuffer.LmPasswordPresent = TRUE;
+
+                            InternalAllBuffer.LmPassword.Length = sizeof(ENCRYPTED_LM_OWF_PASSWORD);
+                            InternalAllBuffer.LmPassword.MaximumLength = sizeof(ENCRYPTED_LM_OWF_PASSWORD);
+                            InternalAllBuffer.LmPassword.Buffer = (LPWSTR)&Internal1Buffer.EncryptedLmOwfPassword;
+                        }
+                    }
+                }
+            }
+        }
+
+        RpcTryExcept
+        {
+            Status = SamrSetInformationUser((SAMPR_HANDLE)UserHandle,
+                                            UserAllInformation,
+                                            (PVOID)&InternalAllBuffer);
+        }
+        RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+        {
+            Status = I_RpcMapWin32Status(RpcExceptionCode());
         }
+        RpcEndExcept;
+
+        if (!NT_SUCCESS(Status))
+        {
+            TRACE("SamrSetInformation() failed (Status 0x%08lx)\n", Status);
+        }
+
+        return Status;
     }
 
     RpcTryExcept
index 0f4ac20..e0df244 100644 (file)
@@ -7115,10 +7115,25 @@ SampSetUserAll(PSAM_DB_OBJECT UserObject,
     SAM_USER_FIXED_DATA FixedData;
     ULONG Length = 0;
     ULONG WhichFields;
+    PENCRYPTED_NT_OWF_PASSWORD NtPassword = NULL;
+    PENCRYPTED_LM_OWF_PASSWORD LmPassword = NULL;
+    BOOLEAN NtPasswordPresent = FALSE;
+    BOOLEAN LmPasswordPresent = FALSE;
+    BOOLEAN WriteFixedData = FALSE;
     NTSTATUS Status = STATUS_SUCCESS;
 
     WhichFields = Buffer->All.WhichFields;
 
+    /* Get the fixed size attributes */
+    Length = sizeof(SAM_USER_FIXED_DATA);
+    Status = SampGetObjectAttribute(UserObject,
+                                    L"F",
+                                    NULL,
+                                    (PVOID)&FixedData,
+                                    &Length);
+    if (!NT_SUCCESS(Status))
+        goto done;
+
     if (WhichFields & USER_ALL_USERNAME)
     {
         Status = SampSetUserName(UserObject,
@@ -7234,39 +7249,89 @@ SampSetUserAll(PSAM_DB_OBJECT UserObject,
             goto done;
     }
 
-    if (WhichFields & (USER_ALL_PRIMARYGROUPID |
-                       USER_ALL_ACCOUNTEXPIRES |
-                       USER_ALL_USERACCOUNTCONTROL |
-                       USER_ALL_COUNTRYCODE |
-                       USER_ALL_CODEPAGE))
+    if (WhichFields & USER_ALL_PRIMARYGROUPID)
     {
-        Length = sizeof(SAM_USER_FIXED_DATA);
-        Status = SampGetObjectAttribute(UserObject,
-                                        L"F",
-                                        NULL,
-                                        (PVOID)&FixedData,
-                                        &Length);
-        if (!NT_SUCCESS(Status))
-            goto done;
+        FixedData.PrimaryGroupId = Buffer->All.PrimaryGroupId;
+        WriteFixedData = TRUE;
+    }
+
+    if (WhichFields & USER_ALL_ACCOUNTEXPIRES)
+    {
+        FixedData.AccountExpires.LowPart = Buffer->All.AccountExpires.LowPart;
+        FixedData.AccountExpires.HighPart = Buffer->All.AccountExpires.HighPart;
+        WriteFixedData = TRUE;
+    }
+
+    if (WhichFields & USER_ALL_USERACCOUNTCONTROL)
+    {
+        FixedData.UserAccountControl = Buffer->All.UserAccountControl;
+        WriteFixedData = TRUE;
+    }
 
-        if (WhichFields & USER_ALL_PRIMARYGROUPID)
-            FixedData.PrimaryGroupId = Buffer->All.PrimaryGroupId;
+    if (WhichFields & USER_ALL_COUNTRYCODE)
+    {
+        FixedData.CountryCode = Buffer->All.CountryCode;
+        WriteFixedData = TRUE;
+    }
+
+    if (WhichFields & USER_ALL_CODEPAGE)
+    {
+        FixedData.CodePage = Buffer->All.CodePage;
+        WriteFixedData = TRUE;
+    }
 
-        if (WhichFields & USER_ALL_ACCOUNTEXPIRES)
+    if (WhichFields & (USER_ALL_NTPASSWORDPRESENT |
+                       USER_ALL_LMPASSWORDPRESENT))
+    {
+        if (WhichFields & USER_ALL_NTPASSWORDPRESENT)
+        {
+            NtPassword = (PENCRYPTED_NT_OWF_PASSWORD)Buffer->All.NtOwfPassword.Buffer;
+            NtPasswordPresent = Buffer->All.NtPasswordPresent;
+        }
+
+        if (WhichFields & USER_ALL_LMPASSWORDPRESENT)
         {
-            FixedData.AccountExpires.LowPart = Buffer->All.AccountExpires.LowPart;
-            FixedData.AccountExpires.HighPart = Buffer->All.AccountExpires.HighPart;
+            LmPassword = (PENCRYPTED_LM_OWF_PASSWORD)Buffer->All.LmOwfPassword.Buffer;
+            LmPasswordPresent = Buffer->All.LmPasswordPresent;
         }
 
-        if (WhichFields & USER_ALL_USERACCOUNTCONTROL)
-            FixedData.UserAccountControl = Buffer->All.UserAccountControl;
+        Status = SampSetUserPassword(UserObject,
+                                     NtPassword,
+                                     NtPasswordPresent,
+                                     LmPassword,
+                                     LmPasswordPresent);
+        if (!NT_SUCCESS(Status))
+            goto done;
 
-        if (WhichFields & USER_ALL_COUNTRYCODE)
-            FixedData.CountryCode = Buffer->Preferences.CountryCode;
+        /* The password has just been set */
+        Status = NtQuerySystemTime(&FixedData.PasswordLastSet);
+        if (!NT_SUCCESS(Status))
+            goto done;
 
-        if (WhichFields & USER_ALL_CODEPAGE)
-            FixedData.CodePage = Buffer->Preferences.CodePage;
+        WriteFixedData = TRUE;
+    }
 
+    if (WhichFields & USER_ALL_PASSWORDEXPIRED)
+    {
+        if (Buffer->All.PasswordExpired)
+        {
+            /* The pasword was last set ages ago */
+            FixedData.PasswordLastSet.LowPart = 0;
+            FixedData.PasswordLastSet.HighPart = 0;
+        }
+        else
+        {
+            /* The pasword was last set right now */
+            Status = NtQuerySystemTime(&FixedData.PasswordLastSet);
+            if (!NT_SUCCESS(Status))
+                goto done;
+        }
+
+        WriteFixedData = TRUE;
+    }
+
+    if (WriteFixedData == TRUE)
+    {
         Status = SampSetObjectAttribute(UserObject,
                                         L"F",
                                         REG_BINARY,
@@ -7276,15 +7341,7 @@ SampSetUserAll(PSAM_DB_OBJECT UserObject,
             goto done;
     }
 
-/*
-FIXME:
-    USER_ALL_NTPASSWORDPRESENT
-    USER_ALL_LMPASSWORDPRESENT
-    USER_ALL_PASSWORDEXPIRED
-*/
-
 done:
-
     return Status;
 }
 
index d2f0918..9c8a651 100644 (file)
@@ -402,12 +402,14 @@ SampSetUserPassword(IN PSAM_DB_OBJECT UserObject,
     NTSTATUS Status;
 
     UseNtPassword =
-       ((memcmp(NtPassword, &EmptyNtHash, sizeof(ENCRYPTED_NT_OWF_PASSWORD)) != 0) &&
-        (NtPasswordPresent != FALSE));
+       ((NtPasswordPresent != FALSE) &&
+        (NtPassword != NULL) &&
+        (memcmp(NtPassword, &EmptyNtHash, sizeof(ENCRYPTED_NT_OWF_PASSWORD)) != 0));
 
     UseLmPassword =
-       ((memcmp(LmPassword, &EmptyLmHash, sizeof(ENCRYPTED_LM_OWF_PASSWORD)) != 0) &&
-        (LmPasswordPresent != FALSE));
+       ((LmPasswordPresent != FALSE) &&
+        (LmPassword != NULL) &&
+        (memcmp(LmPassword, &EmptyLmHash, sizeof(ENCRYPTED_LM_OWF_PASSWORD)) != 0));
 
     /* Update the NT password history only if we have a new non-empty NT password */
     if (UseNtPassword)
index aa147f6..d808025 100644 (file)
@@ -222,7 +222,7 @@ NTAPI
 KdpPollByte(OUT PUCHAR OutByte)
 {
     /* Poll the byte */
-    if (CpGetByte(&KdDebugComPort, OutByte, FALSE) == CP_GET_SUCCESS)
+    if (CpGetByte(&KdDebugComPort, OutByte, FALSE, TRUE) == CP_GET_SUCCESS)
     {
         return KDP_PACKET_RECEIVED;
     }
@@ -237,7 +237,7 @@ NTAPI
 KdpReceiveByte(OUT PUCHAR OutByte)
 {
     /* Get the byte */
-    if (CpGetByte(&KdDebugComPort, OutByte, TRUE) == CP_GET_SUCCESS)
+    if (CpGetByte(&KdDebugComPort, OutByte, TRUE, FALSE) == CP_GET_SUCCESS)
     {
         return KDP_PACKET_RECEIVED;
     }
index a005a1e..9b2878b 100644 (file)
@@ -111,8 +111,7 @@ VOID
 ChannelReferenceToOneByIndexWithLock(IN LONG Index)
 {
     ChannelSlotLock(Index);
-    ASSERT(ChannelGetReferenceCount((Index)) == 1);
-    _InterlockedExchange(&ChannelRefCount[Index], 1);
+    ChannelReferenceToOneByIndex(Index);
     ChannelSlotUnlock(Index);
 }
 
@@ -359,7 +358,7 @@ ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel,
     ChannelLockCreates();
 
     /* Is the channel manager initialized? */
-    if (ChannelCreateEnabled)
+    if (!ChannelCreateEnabled)
     {
         /* Nope, bail out */
         Status = STATUS_UNSUCCESSFUL;
@@ -405,7 +404,6 @@ ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel,
     if (i == SAC_MAX_CHANNELS)
     {
         /* Bail out */
-        Status = STATUS_UNSUCCESSFUL;
         goto ReturnStatus;
     }
 
index 0ee165d..0476b59 100644 (file)
@@ -147,11 +147,11 @@ ChannelIRead(IN PSAC_CHANNEL Channel,
     return Status;
 }
 
-UCHAR
+WCHAR
 NTAPI
 ChannelIReadLast(IN PSAC_CHANNEL Channel)
 {
-    UCHAR LastChar;
+    WCHAR LastChar;
 
     /* Read the last character while holding the lock */
     ChannelLockIBuffer(Channel);
@@ -410,9 +410,19 @@ ChannelInitializeVTable(IN PSAC_CHANNEL Channel)
     switch (Channel->ChannelType)
     {
         case VtUtf8:
-            /* FIXME: TODO */
-            ASSERT(FALSE);
-            return STATUS_NOT_IMPLEMENTED;
+            /* Setup the calls for a VT-UTF8 channel */
+            Channel->ChannelCreate = VTUTF8ChannelCreate;
+            Channel->ChannelDestroy = VTUTF8ChannelDestroy;
+            Channel->ChannelOutputFlush = VTUTF8ChannelOFlush;
+            Channel->ChannelOutputEcho = VTUTF8ChannelOEcho;
+            Channel->ChannelOutputWrite = VTUTF8ChannelOWrite;
+            Channel->ChannelOutputRead = VTUTF8ChannelORead;
+            Channel->ChannelInputWrite = VTUTF8ChannelIWrite;
+            Channel->ChannelInputRead = VTUTF8ChannelIRead;
+            Channel->ChannelInputReadLast = VTUTF8ChannelIReadLast;
+            Channel->ChannelInputBufferIsFull = VTUTF8ChannelIBufferIsFull;
+            Channel->ChannelInputBufferLength = VTUTF8ChannelIBufferLength;
+            break;
 
         case Cmd:
             /* FIXME: TODO */
index 76d6edb..c515ce2 100644 (file)
@@ -17,58 +17,44 @@ ULONG GlobalBufferSize;
 
 /* FUNCTIONS *****************************************************************/
 
-VOID
-NTAPI
-DoRebootCommand(IN BOOLEAN Reboot)
+NTSTATUS
+DoChannelListCommand(
+       VOID
+       )
 {
-    LARGE_INTEGER Timeout, TickCount;
-    NTSTATUS Status;
-    KEVENT Event;
-    SAC_DBG(1, "SAC DoRebootCommand: Entering.\n");
-
-    /* Get the current time now, and setup a timeout in 1 second */
-    KeQueryTickCount(&TickCount);
-    Timeout.QuadPart = TickCount.QuadPart / (10000000 / KeQueryTimeIncrement());
-
-    /* Check if the timeout is small enough */
-    if (Timeout.QuadPart < 60 )
-    {
-        /* Show the prompt */
-        ConMgrSimpleEventMessage(Reboot ?
-                                 SAC_RESTART_PROMPT : SAC_SHUTDOWN_PROMPT,
-                                 TRUE);
-
-        /* Do the wait */
-        KeInitializeEvent(&Event, SynchronizationEvent, 0);
-        Timeout.QuadPart = -10000000 * (60 - Timeout.LowPart);
-        KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, &Timeout);
-    }
+       return STATUS_NOT_IMPLEMENTED;
+}
 
-    /* Do a shutdown or a reboot, based on the request */
-    Status = NtShutdownSystem(Reboot ? ShutdownReboot : ShutdownPowerOff);
+NTSTATUS
+DoChannelCloseByNameCommand(
+       IN PCHAR Count
+       )
+{
+       return STATUS_NOT_IMPLEMENTED;
+}
 
-    /* Check if anyone in the command channel already allocated this */
-    if (!GlobalBuffer)
-    {
-        /* Allocate it */
-        GlobalBuffer = SacAllocatePool(PAGE_SIZE, GLOBAL_BLOCK_TAG);
-        if (!GlobalBuffer)
-        {
-            /* We need the global buffer, bail out without it*/
-            SacPutSimpleMessage(SAC_OUT_OF_MEMORY_PROMPT);
-            SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoRebootCommand: Exiting (1).\n");
-            return;
-        }
+NTSTATUS
+DoChannelCloseByIndexCommand(
+       IN ULONG ChannelIndex
+       )
+{
+       return STATUS_NOT_IMPLEMENTED;
+}
 
-        /* Set the size of the buffer */
-        GlobalBufferSize = PAGE_SIZE;
-    }
+NTSTATUS
+DoChannelSwitchByNameCommand(
+       IN PCHAR Count
+       )
+{
+       return STATUS_NOT_IMPLEMENTED;
+}
 
-    /* We came back from a reboot, this doesn't make sense, tell the user */
-    SacPutSimpleMessage(Reboot ? SAC_RESTART_FAIL_PROMPT : SAC_SHUTDOWN_FAIL_PROMPT);
-    swprintf(GlobalBuffer, GetMessage(SAC_FAIL_PROMPT), Status);
-    SacPutString(GlobalBuffer);
-    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoRebootCommand: Exiting.\n");
+NTSTATUS
+DoChannelSwitchByIndexCommand(
+       IN ULONG ChannelIndex
+       )
+{
+       return STATUS_NOT_IMPLEMENTED;
 }
 
 NTSTATUS
@@ -124,169 +110,201 @@ CallQueryIPIOCTL(
 }
 
 VOID
-DoFullInfoCommand(
-       VOID
-       )
+NTAPI
+DoRebootCommand(IN BOOLEAN Reboot)
 {
+    LARGE_INTEGER Timeout, TickCount;
+    NTSTATUS Status;
+    KEVENT Event;
+    SAC_DBG(1, "SAC DoRebootCommand: Entering.\n");
 
-}
+    /* Get the current time now, and setup a timeout in 1 second */
+    KeQueryTickCount(&TickCount);
+    Timeout.QuadPart = TickCount.QuadPart / (10000000 / KeQueryTimeIncrement());
 
-VOID
-DoPagingCommand(
-       VOID
-       )
-{
+    /* Check if the timeout is small enough */
+    if (Timeout.QuadPart < 60 )
+    {
+        /* Show the prompt */
+        ConMgrSimpleEventMessage(Reboot ?
+                                 SAC_RESTART_PROMPT : SAC_SHUTDOWN_PROMPT,
+                                 TRUE);
 
-}
+        /* Do the wait */
+        KeInitializeEvent(&Event, SynchronizationEvent, 0);
+        Timeout.QuadPart = -10000000 * (60 - Timeout.LowPart);
+        KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, &Timeout);
+    }
 
-VOID
-DoSetTimeCommand(
-       IN PCHAR InputTime
-       )
-{
+    /* Do a shutdown or a reboot, based on the request */
+    Status = NtShutdownSystem(Reboot ? ShutdownReboot : ShutdownPowerOff);
 
+    /* Check if anyone in the command channel already allocated this */
+    if (!GlobalBuffer)
+    {
+        /* Allocate it */
+        GlobalBuffer = SacAllocatePool(PAGE_SIZE, GLOBAL_BLOCK_TAG);
+        if (!GlobalBuffer)
+        {
+            /* We need the global buffer, bail out without it*/
+            SacPutSimpleMessage(SAC_OUT_OF_MEMORY_PROMPT);
+            SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoRebootCommand: Exiting (1).\n");
+            return;
+        }
+
+        /* Set the size of the buffer */
+        GlobalBufferSize = PAGE_SIZE;
+    }
+
+    /* We came back from a reboot, this doesn't make sense, tell the user */
+    SacPutSimpleMessage(Reboot ? SAC_RESTART_FAIL_PROMPT : SAC_SHUTDOWN_FAIL_PROMPT);
+    swprintf(GlobalBuffer, GetMessage(SAC_FAIL_PROMPT), Status);
+    SacPutString(GlobalBuffer);
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC DoRebootCommand: Exiting.\n");
 }
 
 VOID
-DoKillCommand(
-       IN PCHAR KillString
-       )
+NTAPI
+DoFullInfoCommand(VOID)
 {
 
 }
 
 VOID
-DoLowerPriorityCommand(
-       IN PCHAR PrioString
-       )
+NTAPI
+DoPagingCommand(VOID)
 {
 
 }
 
 VOID
-DoRaisePriorityCommand(
-       IN PCHAR PrioString
-       )
+NTAPI
+DoSetTimeCommand(IN PCHAR InputTime)
 {
 
 }
 
 VOID
-DoLimitMemoryCommand(
-       IN PCHAR LimitString
-       )
+NTAPI
+DoKillCommand(IN PCHAR KillString)
 {
 
 }
 
 VOID
-DoCrashCommand(
-       VOID
-       )
+NTAPI
+DoLowerPriorityCommand(IN PCHAR PrioString)
 {
 
 }
 
 VOID
-DoMachineInformationCommand(
-       VOID
-       )
+NTAPI
+DoRaisePriorityCommand(IN PCHAR PrioString)
 {
 
 }
 
-NTSTATUS
-DoChannelListCommand(
-       VOID
-       )
+VOID
+NTAPI
+DoLimitMemoryCommand(IN PCHAR LimitString)
 {
-       return STATUS_NOT_IMPLEMENTED;
-}
 
-NTSTATUS
-DoChannelCloseByNameCommand(
-       IN PCHAR Count
-       )
-{
-       return STATUS_NOT_IMPLEMENTED;
 }
 
-NTSTATUS
-DoChannelCloseByIndexCommand(
-       IN ULONG ChannelIndex
-       )
+VOID
+NTAPI
+DoCrashCommand(VOID)
 {
-       return STATUS_NOT_IMPLEMENTED;
-}
 
-NTSTATUS
-DoChannelSwitchByNameCommand(
-       IN PCHAR Count
-       )
-{
-       return STATUS_NOT_IMPLEMENTED;
 }
 
-NTSTATUS
-DoChannelSwitchByIndexCommand(
-       IN ULONG ChannelIndex
-       )
+VOID
+NTAPI
+DoMachineInformationCommand(VOID)
 {
-       return STATUS_NOT_IMPLEMENTED;
+
 }
 
 VOID
-DoChannelCommand(
-       IN PCHAR ChannelString
-       )
+NTAPI
+DoChannelCommand(IN PCHAR ChannelString)
 {
 
 }
 
 VOID
-DoCmdCommand(
-       VOID
-       )
+NTAPI
+DoCmdCommand(IN PCHAR InputString)
 {
 
 }
 
 VOID
-DoLockCommand(
-       VOID
-       )
+NTAPI
+DoLockCommand(VOID)
 {
 
 }
 
+#define PRINT_HELP_MESSAGE(x)  \
+{   \
+    Count += NewCount; \
+    NewCount = GetMessageLineCount(x); \
+    if ( (NewCount + Count) > SAC_VTUTF8_COL_HEIGHT) \
+    { \
+        PutMore(&ScreenFull); \
+        if (ScreenFull) return; \
+        Count = 0; \
+    } \
+    SacPutSimpleMessage(x); \
+}
+
 VOID
-DoHelpCommand(
-       VOID
-       )
+NTAPI
+DoHelpCommand(VOID)
 {
-
+    ULONG NewCount = 0, Count = 0;
+    BOOLEAN ScreenFull = FALSE;
+
+    PRINT_HELP_MESSAGE(112);
+    PRINT_HELP_MESSAGE(12);
+    PRINT_HELP_MESSAGE(13);
+    PRINT_HELP_MESSAGE(14);
+    PRINT_HELP_MESSAGE(15);
+    PRINT_HELP_MESSAGE(16);
+    PRINT_HELP_MESSAGE(31);
+    PRINT_HELP_MESSAGE(18);
+    PRINT_HELP_MESSAGE(19);
+    PRINT_HELP_MESSAGE(32);
+    PRINT_HELP_MESSAGE(20);
+    PRINT_HELP_MESSAGE(21);
+    PRINT_HELP_MESSAGE(22);
+    PRINT_HELP_MESSAGE(23);
+    PRINT_HELP_MESSAGE(24);
+    PRINT_HELP_MESSAGE(25);
+    PRINT_HELP_MESSAGE(27);
+    PRINT_HELP_MESSAGE(28);
+    PRINT_HELP_MESSAGE(29);
 }
 
 VOID
-DoGetNetInfo(
-       IN BOOLEAN DoPrint
-       )
+NTAPI
+DoGetNetInfo(IN BOOLEAN DoPrint)
 {
 
 }
 
 VOID
-DoSetIpAddressCommand(
-       IN PCHAR IpString
-       )
+NTAPI
+DoSetIpAddressCommand(IN PCHAR IpString)
 {
-       
+
 }
 
 VOID
-DoTlistCommand(
-       VOID
-       )
+NTAPI
+DoTlistCommand(VOID)
 {
-       
-}
\ No newline at end of file
+
+}
index b012cad..fda8547 100644 (file)
@@ -27,76 +27,10 @@ PSAC_CHANNEL SacChannel;
 ULONG ExecutePostConsumerCommand;
 PSAC_CHANNEL ExecutePostConsumerCommandData;
 
-/* FUNCTIONS *****************************************************************/
-
-VOID
-NTAPI
-ConMgrSerialPortConsumer(VOID)
-{
-    NTSTATUS Status;
-    CHAR Char;
-    SAC_DBG(0x2000, "SAC TimerDpcRoutine: Entering.\n"); //bug
-
-    /* Acquire the manager lock and make sure a channel is selected */
-    SacAcquireMutexLock();
-    ASSERT(CurrentChannel);
-
-    /* Read whatever came off the serial port */
-    for (Status = SerialBufferGetChar(&Char);
-         NT_SUCCESS(Status);
-         Status = SerialBufferGetChar(&Char))
-    {
-        /* If nothing came through, bail out */
-        if (Status == STATUS_NO_DATA_DETECTED) break;
-    }
+BOOLEAN InputInEscape, InputInEscTab, ConMgrLastCharWasCR;
+CHAR InputBuffer[80];
 
-    /* We're done, release the lock */
-    SacReleaseMutexLock();
-    SAC_DBG(0x2000, "SAC TimerDpcRoutine: Exiting.\n"); //bug
-}
-
-VOID
-NTAPI
-ConMgrWorkerProcessEvents(IN PSAC_DEVICE_EXTENSION DeviceExtension)
-{
-    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC WorkerProcessEvents: Entering.\n");
-
-    /* Enter the main loop */
-    while (TRUE)
-    {
-        /* Wait for something to do */
-        KeWaitForSingleObject(&DeviceExtension->Event,
-                              Executive,
-                              KernelMode,
-                              FALSE,
-                              NULL);
-
-        /* Consume data off the serial port */
-        ConMgrSerialPortConsumer();
-        switch (ExecutePostConsumerCommand)
-        {
-            case 1:
-                /* A reboot was sent, do it  */
-                DoRebootCommand(FALSE);
-                break;
-
-            case 2:
-                /* A close was sent, do it */
-                ChanMgrCloseChannel(ExecutePostConsumerCommandData);
-                ChanMgrReleaseChannel(ExecutePostConsumerCommandData);
-                break;
-
-            case 3:
-                /* A shutdown was sent, do it */
-                DoRebootCommand(TRUE);
-                break;
-        }
-
-        /* Clear the serial port consumer state */
-        ExecutePostConsumerCommand = 0;
-        ExecutePostConsumerCommandData = NULL;
-    }
-}
+/* FUNCTIONS *****************************************************************/
 
 VOID
 NTAPI
@@ -235,7 +169,7 @@ ConMgrInitialize(VOID)
 
     /* Setup the attributes for the raw SAC channel */
     RtlZeroMemory(&SacChannelAttributes, sizeof(SacChannelAttributes));
-    SacChannelAttributes.ChannelType = Raw;
+    SacChannelAttributes.ChannelType = Raw; /* FIXME: Should be VtUtf8 */
 
     /* Get the right name for it */
     pcwch = GetMessage(SAC_CHANNEL_NAME);
@@ -504,6 +438,7 @@ ConMgrChannelOWrite(IN PSAC_CHANNEL Channel,
 
     /* Do the write with the lock held */
     SacAcquireMutexLock();
+    ASSERT(FALSE);
     Status = STATUS_NOT_IMPLEMENTED;// ChannelOWrite(Channel, WriteBuffer + 24, *(WriteBuffer + 20));
     SacReleaseMutexLock();
 
@@ -512,21 +447,441 @@ ConMgrChannelOWrite(IN PSAC_CHANNEL Channel,
     return Status;
 }
 
-NTSTATUS
+#define Shutdown    1
+#define Restart     3
+#define Nothing     0
+BOOLEAN GlobalPagingNeeded;
+
+VOID
 NTAPI
-ConMgrGetChannelCloseMessage(IN PSAC_CHANNEL Channel,
-                             IN NTSTATUS CloseStatus,
-                             OUT PWCHAR OutputBuffer)
+ConMgrProcessInputLine(VOID)
 {
-    ASSERT(FALSE);
-    return STATUS_NOT_IMPLEMENTED;
+    BOOLEAN EnablePaging;
+    NTSTATUS Status;
+
+    SAC_DBG(4, "SAC Input Test: %s\n", InputBuffer);
+
+    if (!strncmp(InputBuffer, "t", 1))
+    {
+        DoTlistCommand();
+    }
+    else if (!strncmp(InputBuffer, "?", 1))
+    {
+        DoHelpCommand();
+    }
+    else if (!strncmp(InputBuffer, "help", 4))
+    {
+        DoHelpCommand();
+    }
+    else if (!strncmp(InputBuffer, "f", 1))
+    {
+        DoFullInfoCommand();
+    }
+    else if (!strncmp(InputBuffer, "p", 1))
+    {
+        DoPagingCommand();
+    }
+    else if (!strncmp(InputBuffer, "id", 2))
+    {
+        DoMachineInformationCommand();
+    }
+    else if (!strncmp(InputBuffer, "crashdump", 9))
+    {
+        DoCrashCommand();
+    }
+    else if (!strncmp(InputBuffer, "lock", 4))
+    {
+        DoLockCommand();
+    }
+    else if (!strncmp(InputBuffer, "shutdown", 8))
+    {
+        ExecutePostConsumerCommand = Shutdown;
+    }
+    else if (!strncmp(InputBuffer, "restart", 7))
+    {
+        ExecutePostConsumerCommand = Restart;
+    }
+    else if (!strncmp(InputBuffer, "d", 1))
+    {
+        EnablePaging = GlobalPagingNeeded;
+        Status = HeadlessDispatch(HeadlessCmdDisplayLog,
+                                  &EnablePaging,
+                                  sizeof(EnablePaging),
+                                  NULL,
+                                  0);
+        if (!NT_SUCCESS(Status)) SAC_DBG(4, "SAC Display Log failed.\n");
+    }
+    else if (!strncmp(InputBuffer, "cmd", 3))
+    {
+        if (CommandConsoleLaunchingEnabled)
+        {
+            DoCmdCommand(InputBuffer);
+        }
+        else
+        {
+            SacPutSimpleMessage(148);
+        }
+    }
+    else if (!(strncmp(InputBuffer, "ch", 2)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[2] == ' ')) ||
+              (strlen(InputBuffer) == 2)))
+    {
+        DoChannelCommand(InputBuffer);
+    }
+    else if (!(strncmp(InputBuffer, "k", 1)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[1] == ' ')) ||
+              (strlen(InputBuffer) == 1)))
+    {
+        DoKillCommand(InputBuffer);
+    }
+    else if (!(strncmp(InputBuffer, "l", 1)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[1] == ' ')) ||
+              (strlen(InputBuffer) == 1)))
+    {
+        DoLowerPriorityCommand(InputBuffer);
+    }
+    else if (!(strncmp(InputBuffer, "r", 1)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[1] == ' ')) ||
+              (strlen(InputBuffer) == 1)))
+    {
+        DoRaisePriorityCommand(InputBuffer);
+    }
+    else if (!(strncmp(InputBuffer, "m", 1)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[1] == ' ')) ||
+              (strlen(InputBuffer) == 1)))
+    {
+        DoLimitMemoryCommand(InputBuffer);
+    }
+    else if (!(strncmp(InputBuffer, "s", 1)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[1] == ' ')) ||
+              (strlen(InputBuffer) == 1)))
+    {
+        DoSetTimeCommand(InputBuffer);
+    }
+    else if (!(strncmp(InputBuffer, "i", 1)) &&
+             (((strlen(InputBuffer) > 1) && (InputBuffer[1] == ' ')) ||
+              (strlen(InputBuffer) == 1)))
+    {
+        DoSetIpAddressCommand(InputBuffer);
+    }
+    else if ((InputBuffer[0] != '\n') && (InputBuffer[0] != ANSI_NULL))
+    {
+        SacPutSimpleMessage(105);
+    }
 }
 
 VOID
 NTAPI
-ConMgrProcessInputLine(VOID)
+ConMgrSerialPortConsumer(VOID)
+{
+    NTSTATUS Status;
+    CHAR Char;
+    WCHAR LastChar;
+    CHAR ReadBuffer[2];
+    ULONG ReadBufferSize, i;
+    WCHAR StringBuffer[2];
+    SAC_DBG(SAC_DBG_MACHINE, "SAC TimerDpcRoutine: Entering.\n"); //bug
+
+    /* Acquire the manager lock and make sure a channel is selected */
+    SacAcquireMutexLock();
+    ASSERT(CurrentChannel);
+
+    /* Read whatever came off the serial port */
+    for (Status = SerialBufferGetChar(&Char);
+         NT_SUCCESS(Status);
+         Status = SerialBufferGetChar(&Char))
+    {
+        /* If nothing came through, bail out */
+        if (Status == STATUS_NO_DATA_DETECTED) break;
+
+        /* Check if ESC was pressed */
+        if (Char == '\x1B')
+        {
+            /* Was it already pressed? */
+            if (!InputInEscape)
+            {
+                /* First time ESC is pressed! Remember and reset TAB state */
+                InputInEscTab = FALSE;
+                InputInEscape = TRUE;
+                continue;
+            }
+        }
+        else if (Char == '\t')
+        {
+            /* TAB was pressed, is it following ESC (VT-100 sequence)? */
+            if (InputInEscape)
+            {
+                /* Yes! This must be the only ESC-TAB we see in once moment */
+                ASSERT(InputInEscTab == FALSE);
+
+                /* No longer treat us as being in ESC */
+                InputInEscape = FALSE;
+
+                /* ESC-TAB is the sequence for changing channels */
+                Status = ConMgrAdvanceCurrentChannel();
+                if (!NT_SUCCESS(Status)) break;
+
+                /* Remember ESC-TAB was pressed */
+                InputInEscTab = TRUE;
+                continue;
+            }
+        }
+        else if ((Char == '0') && (InputInEscTab))
+        {
+            /* It this ESC-TAB-0? */
+            ASSERT(InputInEscape == FALSE);
+            InputInEscTab = FALSE;
+
+            /* If writes are already enabled, don't do this */
+            if (!CurrentChannel->WriteEnabled)
+            {
+                /* Reset the channel, this is our special sequence */
+                Status = ConMgrResetCurrentChannel(FALSE);
+                if (!NT_SUCCESS(Status)) break;
+            }
+
+            continue;
+        }
+        else
+        {
+            /* This is ESC-TAB-something else */
+            InputInEscTab = FALSE;
+
+            /* If writes are already enabled, don't do this */
+            if (!CurrentChannel->WriteEnabled)
+            {
+                /* Display the current channel */
+                InputInEscape = FALSE;
+                Status = ConMgrDisplayCurrentChannel();
+                if (!NT_SUCCESS(Status)) break;
+                continue;
+            }
+        }
+
+        /* Check if an ESC-sequence was being typed into a command channel */
+        if ((InputInEscape) && (CurrentChannel != SacChannel))
+        {
+            /* Store the ESC in the current channel buffer */
+            ReadBuffer[0] = '\x1B';
+            ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR));
+        }
+
+        /* Check if we are no longer pressing ESC and exit the mode if so */
+        if (Char != '\x1B') InputInEscape = FALSE;
+
+        /* Whatever was typed in, save it int eh current channel */
+        ChannelIWrite(CurrentChannel, &Char, sizeof(Char));
+
+        /* If this is a command channel, we're done, nothing to process */
+        if (CurrentChannel != SacChannel) continue;
+
+        /* Check for line feed right after a carriage return */
+        if ((ConMgrLastCharWasCR) && (Char == '\n'))
+        {
+            /* Ignore the line feed, but clear the carriage return */
+            ChannelIReadLast(CurrentChannel);
+            ConMgrLastCharWasCR = 0;
+            continue;
+        }
+
+        /* Check if the user did a carriage return */
+        ConMgrLastCharWasCR = (Char == '\n');
+
+        /* If the user did an "ENTER", we need to run the command */
+        if ((Char == '\n') || (Char == '\r'))
+        {
+            /* Echo back to the terminal */
+            SacPutString(L"\r\n");
+
+DoLineParsing:
+            /* Inhibit the character (either CR or LF) */
+            ChannelIReadLast(CurrentChannel);
+
+            /* NULL-terminate the channel's input buffer */
+            ReadBuffer[0] = ANSI_NULL;
+            ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR));
+
+            /* Loop over every last character */
+            do
+            {
+                /* Read every character in the channel, and strip whitespace */
+                LastChar = ChannelIReadLast(CurrentChannel);
+                ReadBuffer[0] = (CHAR) LastChar;
+            } while ((!(LastChar) ||
+                       (LastChar == L' ') ||
+                       (LastChar == L'\t')) &&
+                     (ChannelIBufferLength(CurrentChannel)));
+
+            /* Write back into the channel the last character */
+            ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR));
+
+            /* NULL-terminate the input buffer */
+            ReadBuffer[0] = ANSI_NULL;
+            ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR));
+
+            /* Now loop over every first character */
+            do
+            {
+                /* Read every character in the channel, and strip whitespace */
+                ChannelIRead(CurrentChannel,
+                             ReadBuffer,
+                             sizeof(CHAR), /* FIXME: Should be sizeof(ReadBuffer) */
+                             &ReadBufferSize);
+            } while ((ReadBufferSize) &&
+                     ((ReadBuffer[0] == ' ') || (ReadBuffer[0] == '\t')));
+
+            /* We read one more than we should, so treat that as our first one */
+            InputBuffer[0] = ReadBuffer[0];
+            i = 1;
+
+            /* And now loop reading all the others */
+            do
+            {
+                /* Read each character -- there should be max 80 */
+                ChannelIRead(CurrentChannel,
+                             ReadBuffer,
+                             sizeof(CHAR), /* FIXME: Should be sizeof(ReadBuffer) */
+                             &ReadBufferSize);
+                ASSERT(i < SAC_VTUTF8_COL_WIDTH);
+                InputBuffer[i++] = ReadBuffer[0];
+            } while (ReadBufferSize);
+
+            /* Now go over the entire input stream */
+            for (i = 0; InputBuffer[i]; i++)
+            {
+                /* Again it should be less than 80 characters */
+                ASSERT(i < SAC_VTUTF8_COL_WIDTH);
+
+                /* And downbase each character */
+                Char = InputBuffer[i];
+                if ((Char >= 'A') && (Char <= 'Z')) InputBuffer[i] = Char + ' ';
+            }
+
+            /* Ok, at this point, no pending command should exist */
+            ASSERT(ExecutePostConsumerCommand == Nothing);
+
+            /* Go and process the input, then show the prompt again */
+            ConMgrProcessInputLine();
+            SacPutSimpleMessage(SAC_PROMPT);
+
+            /* If the user typed a valid command, get out of here */
+            if (ExecutePostConsumerCommand != Nothing) break;
+
+            /* Keep going */
+            continue;
+        }
+
+        /* Check if the user typed backspace or delete */
+        if ((Char == '\b') || (Char == '\x7F'))
+        {
+            /* Omit the last character, which should be the DEL/BS itself */
+            if (ChannelIBufferLength(CurrentChannel))
+            {
+                ChannelIReadLast(CurrentChannel);
+            }
+
+            /* Omit the before-last character, which is the one to delete */
+            if (ChannelIBufferLength(CurrentChannel))
+            {
+                /* Also send two backspaces back to the console */
+                SacPutString(L"\b \b");
+                ChannelIReadLast(CurrentChannel);
+            }
+
+            /* Keep going */
+            continue;
+        }
+
+        /* If the user pressed CTRL-C at this point, treat it like ENTER */
+        if (Char == '\x03') goto DoLineParsing;
+
+        /* Check if the user pressed TAB */
+        if (Char == '\t')
+        {
+            /* Omit it, send a BELL, and keep going. We ignore TABs */
+            ChannelIReadLast(CurrentChannel);
+            SacPutString(L"\a");
+            continue;
+        }
+
+        /* Check if the user is getting close to the end of the screen */
+        if (ChannelIBufferLength(CurrentChannel) == (SAC_VTUTF8_COL_WIDTH - 2))
+        {
+            /* Delete the last character, replacing it with this one instead */
+            swprintf(StringBuffer, L"\b%c", Char);
+            SacPutString(StringBuffer);
+
+            /* Omit the last two characters from the buffer */
+            ChannelIReadLast(CurrentChannel);
+            ChannelIReadLast(CurrentChannel);
+
+            /* Write the last character that was just typed in */
+            ReadBuffer[0] = Char;
+            ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR));
+            continue;
+        }
+
+        /* Nothing of interest happened, just write the character back */
+        swprintf(StringBuffer, L"%c", Char);
+        SacPutString(StringBuffer);
+    }
+
+    /* We're done, release the lock */
+    SacReleaseMutexLock();
+    SAC_DBG(SAC_DBG_MACHINE, "SAC TimerDpcRoutine: Exiting.\n"); //bug
+}
+
+VOID
+NTAPI
+ConMgrWorkerProcessEvents(IN PSAC_DEVICE_EXTENSION DeviceExtension)
+{
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC WorkerProcessEvents: Entering.\n");
+
+    /* Enter the main loop */
+    while (TRUE)
+    {
+        /* Wait for something to do */
+        KeWaitForSingleObject(&DeviceExtension->Event,
+                              Executive,
+                              KernelMode,
+                              FALSE,
+                              NULL);
+
+        /* Consume data off the serial port */
+        ConMgrSerialPortConsumer();
+        switch (ExecutePostConsumerCommand)
+        {
+            case 1:
+                /* A reboot was sent, do it  */
+                DoRebootCommand(FALSE);
+                break;
+
+            case 2:
+                /* A close was sent, do it */
+                ChanMgrCloseChannel(ExecutePostConsumerCommandData);
+                ChanMgrReleaseChannel(ExecutePostConsumerCommandData);
+                break;
+
+            case 3:
+                /* A shutdown was sent, do it */
+                DoRebootCommand(TRUE);
+                break;
+        }
+
+        /* Clear the serial port consumer state */
+        ExecutePostConsumerCommand = 0;
+        ExecutePostConsumerCommandData = NULL;
+    }
+}
+
+NTSTATUS
+NTAPI
+ConMgrGetChannelCloseMessage(IN PSAC_CHANNEL Channel,
+                             IN NTSTATUS CloseStatus,
+                             OUT PWCHAR OutputBuffer)
 {
     ASSERT(FALSE);
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 NTSTATUS
index eee9ce0..11fff65 100644 (file)
@@ -77,6 +77,8 @@ CreateDeviceSecurityDescriptor(IN PDEVICE_OBJECT *DeviceObject)
     else
     {
         SAC_DBG(SAC_DBG_INIT, "SAC CreateDeviceSecurityDescriptor : Unable to create Raw ACL, error : %x\n", Status);
+        /* FIXME: Temporary hack */
+        Status = STATUS_SUCCESS;
         goto CleanupPath;
     }
 
@@ -236,7 +238,7 @@ InitializeDeviceData(IN PDEVICE_OBJECT DeviceObject)
     KeInitializeTimer(&DeviceExtension->Timer);
     KeInitializeDpc(&DeviceExtension->Dpc, TimerDpcRoutine, DeviceExtension);
     KeInitializeSpinLock(&DeviceExtension->Lock);
-    KeInitializeEvent(&DeviceExtension->Event, SynchronizationEvent, 0);
+    KeInitializeEvent(&DeviceExtension->Event, SynchronizationEvent, FALSE);
     InitializeListHead(&DeviceExtension->List);
 
     /* Attempt to enable HDL support */
@@ -315,8 +317,8 @@ InitializeDeviceData(IN PDEVICE_OBJECT DeviceObject)
         DeviceExtension->PriorityFail = TRUE;
 
         /* Initialize rundown and wait for the thread to do it */
-        KeInitializeEvent(&DeviceExtension->RundownEvent, SynchronizationEvent, 0);
-        KeSetEvent(&DeviceExtension->Event, DeviceExtension->PriorityBoost, 0);
+        KeInitializeEvent(&DeviceExtension->RundownEvent, SynchronizationEvent, FALSE);
+        KeSetEvent(&DeviceExtension->Event, DeviceExtension->PriorityBoost, FALSE);
         Status = KeWaitForSingleObject(&DeviceExtension->RundownEvent,
                                        Executive,
                                        KernelMode,
@@ -377,7 +379,7 @@ InitializeGlobalData(IN PUNICODE_STRING RegistryPath,
     SAC_DBG(SAC_DBG_ENTRY_EXIT, "Entering.\n");
 
     /* If we already did this, bail out */
-    if (!GlobalDataInitialized) goto SuccessExit;
+    if (GlobalDataInitialized) goto SuccessExit;
 
     /* Setup the symbolic link for Win32 support */
     RtlInitUnicodeString(&LinkName, L"\\DosDevices\\SAC");
index 1af10f5..44ade23 100644 (file)
@@ -12,6 +12,8 @@
 
 /* GLOBALS *******************************************************************/
 
+LONG TimerDpcCount;
+
 /* FUNCTIONS *****************************************************************/
 
 NTSTATUS
@@ -61,7 +63,48 @@ TimerDpcRoutine(IN PKDPC Dpc,
                 IN PVOID SystemArgument1,
                 IN PVOID SystemArgument2)
 {
+    HEADLESS_RSP_GET_BYTE ByteValue;
+    ULONG ValueSize;
+    BOOLEAN GotChar;
+    NTSTATUS Status;
+    PSAC_DEVICE_EXTENSION SacExtension;
+
+    /* Update our counter */
+    _InterlockedExchangeAdd(&TimerDpcCount, 1);
+
+    /* Set defaults and loop for new characters */
+    GotChar = FALSE;
+    ValueSize = sizeof(ByteValue);
+    do
+    {
+        /* Ask the kernel for a byte */
+        Status = HeadlessDispatch(HeadlessCmdGetByte,
+                                  NULL,
+                                  0,
+                                  &ByteValue,
+                                  &ValueSize);
+
+        /* Break out if there's nothing interesting */
+        if (!NT_SUCCESS(Status)) break;
+        if (!ByteValue.Value) break;
 
+        /* Update the serial port buffer */
+        SerialPortBuffer[SerialPortProducerIndex] = ByteValue.Value;
+        GotChar = TRUE;
+
+        /* Update the index, let it roll-over if needed */
+        _InterlockedExchange(&SerialPortProducerIndex,
+                             (SerialPortProducerIndex + 1) &
+                             (SAC_SERIAL_PORT_BUFFER_SIZE - 1));
+    } while (ByteValue.Value);
+
+    /* Did we get anything */
+    if (GotChar)
+    {
+        /* Signal the worker thread that there is work to do */
+        SacExtension = DeferredContext;
+        KeSetEvent(&SacExtension->Event, SacExtension->PriorityBoost, FALSE);
+    }
 }
 
 VOID
index 6dfe2f1..4182a5c 100644 (file)
@@ -93,6 +93,11 @@ MyAllocatePool(IN SIZE_T PoolSize,
                IN PCHAR File,
                IN ULONG Line)
 {
+    PVOID p;
+    p = ExAllocatePoolWithTag(NonPagedPool, PoolSize, Tag);
+    SAC_DBG(SAC_DBG_MM, "Returning block 0x%X.\n", p);
+    return p;
+#if 0
     KIRQL OldIrql;
     PSAC_MEMORY_LIST GlobalDescriptor, NewDescriptor;
     PSAC_MEMORY_ENTRY LocalDescriptor, NextDescriptor;
@@ -102,7 +107,7 @@ MyAllocatePool(IN SIZE_T PoolSize,
     SAC_DBG(SAC_DBG_MM, "Entering.\n");
 
     /* Acquire the memory allocation lock and align the size request */
-    KeAcquireSpinLock(&MemoryLock, &OldIrql);;
+    KeAcquireSpinLock(&MemoryLock, &OldIrql);
     PoolSize = ALIGN_UP(PoolSize, ULONGLONG);
 
 #if _USE_SAC_HEAP_ALLOCATOR_
@@ -220,12 +225,14 @@ MyAllocatePool(IN SIZE_T PoolSize,
     Buffer = LocalDescriptor + 1;
     RtlZeroMemory(Buffer, PoolSize);
     return Buffer;
+#endif
 }
 
 VOID
 NTAPI
 MyFreePool(IN PVOID *Block)
 {
+#if 0
     PSAC_MEMORY_ENTRY NextDescriptor;
     PSAC_MEMORY_ENTRY ThisDescriptor, FoundDescriptor;
     PSAC_MEMORY_ENTRY LocalDescriptor = (PVOID)((ULONG_PTR)(*Block) - sizeof(SAC_MEMORY_ENTRY));
@@ -323,10 +330,10 @@ MyFreePool(IN PVOID *Block)
     LocalSize = GlobalSize = 0;
     ThisDescriptor = (PVOID)LocalSize;
     NextDescriptor = (PVOID)GlobalSize;
-    GlobalDescriptor = (PVOID) ThisDescriptor;
+    GlobalDescriptor = (PVOID)ThisDescriptor;
     FoundDescriptor = (PVOID)GlobalDescriptor;
-    GlobalDescriptor = (PVOID) NextDescriptor;
-    NextDescriptor = (PVOID) FoundDescriptor;
+    GlobalDescriptor = (PVOID)NextDescriptor;
+    NextDescriptor = (PVOID)FoundDescriptor;
 
     /* Use the NT pool allocator*/
     ExFreePool(LocalDescriptor);
@@ -334,6 +341,8 @@ MyFreePool(IN PVOID *Block)
 
     /* Release the lock, delete the address, and return */
     KeReleaseSpinLock(&MemoryLock, OldIrql);
+#endif
+    ExFreePool(*Block);
     *Block = NULL;
     SAC_DBG(SAC_DBG_MM, "exiting.\n");
 }
index 098d78d..ad0669a 100644 (file)
@@ -23,17 +23,19 @@ RawChannelCreate(IN PSAC_CHANNEL Channel)
 {
     CHECK_PARAMETER(Channel);
 
+    /* Allocate the output buffer */
     Channel->OBuffer = SacAllocatePool(SAC_RAW_OBUFFER_SIZE, GLOBAL_BLOCK_TAG);
     CHECK_ALLOCATION(Channel->OBuffer);
 
+    /* Allocate the input buffer */
     Channel->IBuffer = SacAllocatePool(SAC_RAW_IBUFFER_SIZE, GLOBAL_BLOCK_TAG);
     CHECK_ALLOCATION(Channel->IBuffer);
 
+    /* Reset all flags and return success */
     Channel->OBufferIndex = 0;
     Channel->OBufferFirstGoodIndex = 0;
     Channel->ChannelHasNewIBufferData = FALSE;
     Channel->ChannelHasNewOBufferData = FALSE;
-
     return STATUS_SUCCESS;
 }
 
@@ -43,16 +45,9 @@ RawChannelDestroy(IN PSAC_CHANNEL Channel)
 {
     CHECK_PARAMETER(Channel);
 
-    if (Channel->OBuffer)
-    {
-        SacFreePool(Channel->OBuffer);
-    }
-
-    if (Channel->IBuffer)
-    {
-        SacFreePool(Channel->IBuffer);
-    }
-
+    /* Free the buffer and then destroy the channel */
+    if (Channel->OBuffer) SacFreePool(Channel->OBuffer);
+    if (Channel->IBuffer) SacFreePool(Channel->IBuffer);
     return ChannelDestroy(Channel);
 }
 
@@ -63,13 +58,6 @@ ChannelHasNewOBufferData(IN PSAC_CHANNEL Channel)
     return Channel->ChannelHasNewOBufferData;
 }
 
-FORCEINLINE
-BOOLEAN
-ChannelHasNewIBufferData(IN PSAC_CHANNEL Channel)
-{
-    return Channel->ChannelHasNewIBufferData;
-}
-
 NTSTATUS
 NTAPI
 RawChannelORead(IN PSAC_CHANNEL Channel,
@@ -207,6 +195,23 @@ RawChannelOFlush(IN PSAC_CHANNEL Channel)
     return ConMgrFlushData(Channel);
 }
 
+NTSTATUS
+NTAPI
+RawChannelOWrite(IN PSAC_CHANNEL Channel,
+                 IN PCHAR String,
+                 IN ULONG Length)
+{
+    CHECK_PARAMETER1(Channel);
+    CHECK_PARAMETER2(String);
+
+    if ((ConMgrIsWriteEnabled(Channel)) && (Channel->WriteEnabled))
+    {
+        return RawChannelOEcho(Channel, String, Length);
+    }
+
+    return RawChannelOWrite2(Channel, String, Length);
+}
+
 ULONG
 NTAPI
 RawChannelGetIBufferIndex(IN PSAC_CHANNEL Channel)
@@ -214,6 +219,7 @@ RawChannelGetIBufferIndex(IN PSAC_CHANNEL Channel)
     ASSERT(Channel);
     ASSERT(Channel->IBufferIndex < SAC_RAW_IBUFFER_SIZE);
 
+    /* Return the current buffer index */
     return Channel->IBufferIndex;
 }
 
@@ -226,34 +232,18 @@ RawChannelSetIBufferIndex(IN PSAC_CHANNEL Channel,
     ASSERT(Channel);
     ASSERT(Channel->IBufferIndex < SAC_RAW_IBUFFER_SIZE);
 
+    /* Set the new index, and if it's not zero, it means we have data */
     Channel->IBufferIndex = BufferIndex;
-    Channel->ChannelHasNewIBufferData = BufferIndex != 0;
-
-    if (!Channel->IBufferIndex)
-    {
-        if (Channel->Flags & SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT)
-        {
-            ChannelClearEvent(Channel, HasNewDataEvent);
-            UNREFERENCED_PARAMETER(Status);
-        }
-    }
-}
-
-NTSTATUS
-NTAPI
-RawChannelOWrite(IN PSAC_CHANNEL Channel,
-                 IN PCHAR String,
-                 IN ULONG Length)
-{
-    CHECK_PARAMETER1(Channel);
-    CHECK_PARAMETER2(String);
+    _InterlockedExchange(&Channel->ChannelHasNewIBufferData, BufferIndex != 0);
 
-    if ((ConMgrIsWriteEnabled(Channel)) && (Channel->WriteEnabled))
+    /* If we have new data, and an event has been registered... */
+    if (!(Channel->IBufferIndex) &&
+        (Channel->Flags & SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT))
     {
-        return RawChannelOEcho(Channel, String, Length);
+        /* Go ahead and signal it */
+        ChannelClearEvent(Channel, HasNewDataEvent);
+        UNREFERENCED_PARAMETER(Status);
     }
-
-    return RawChannelOWrite2(Channel, String, Length);
 }
 
 NTSTATUS
@@ -264,38 +254,46 @@ RawChannelIRead(IN PSAC_CHANNEL Channel,
                 IN PULONG ReturnBufferSize)
 {
     ULONG CopyChars;
-
     CHECK_PARAMETER1(Channel);
     CHECK_PARAMETER2(Buffer);
     CHECK_PARAMETER_WITH_STATUS(BufferSize > 0, STATUS_INVALID_BUFFER_SIZE);
 
+    /* Assume failure */
     *ReturnBufferSize = 0;
 
+    /* Check how many bytes are in the buffer */
     if (Channel->ChannelInputBufferLength(Channel) == 0)
     {
+        /* Apparently nothing. Make sure the flag indicates so too */
         ASSERT(ChannelHasNewIBufferData(Channel) == FALSE);
     }
     else
     {
-        CopyChars = Channel->ChannelInputBufferLength(Channel);
-        if (CopyChars > BufferSize) CopyChars = BufferSize;
+        /* Use the smallest number of bytes either in the buffer or requested */
+        CopyChars = min(Channel->ChannelInputBufferLength(Channel), BufferSize);
         ASSERT(CopyChars <= Channel->ChannelInputBufferLength(Channel));
 
+        /* Copy them into the caller's buffer */
         RtlCopyMemory(Buffer, Channel->IBuffer, CopyChars);
 
+        /* Update the channel's index past the copied (read) bytes */
         RawChannelSetIBufferIndex(Channel,
                                   RawChannelGetIBufferIndex(Channel) - CopyChars);
 
+        /* Are there still bytes that haven't been read yet? */
         if (Channel->ChannelInputBufferLength(Channel))
         {
+            /* Shift them up in the buffer */
             RtlMoveMemory(Channel->IBuffer,
                           &Channel->IBuffer[CopyChars],
                           Channel->ChannelInputBufferLength(Channel));
         }
 
+        /* Return the number of bytes we actually copied */
         *ReturnBufferSize = CopyChars;
     }
 
+    /* Return success */
     return STATUS_SUCCESS;
 }
 
@@ -307,6 +305,7 @@ RawChannelIBufferIsFull(IN PSAC_CHANNEL Channel,
     CHECK_PARAMETER1(Channel);
     CHECK_PARAMETER2(BufferStatus);
 
+    /* If the index is beyond the length, the buffer must be full */
     *BufferStatus = RawChannelGetIBufferIndex(Channel) > SAC_RAW_IBUFFER_SIZE;
     return STATUS_SUCCESS;
 }
@@ -316,25 +315,31 @@ NTAPI
 RawChannelIBufferLength(IN PSAC_CHANNEL Channel)
 {
     ASSERT(Channel);
+
+    /* The index is the current length (since we're 0-based) */
     return RawChannelGetIBufferIndex(Channel);
 }
 
-CHAR
+WCHAR
 NTAPI
 RawChannelIReadLast(IN PSAC_CHANNEL Channel)
 {
     UCHAR LastChar = 0;
-
     ASSERT(Channel);
 
+    /* Check if there's anything to read in the buffer */
     if (Channel->ChannelInputBufferLength(Channel))
     {
-        RawChannelSetIBufferIndex(Channel, RawChannelGetIBufferIndex(Channel) - 1);
+        /* Go back one character */
+        RawChannelSetIBufferIndex(Channel,
+                                  RawChannelGetIBufferIndex(Channel) - 1);
 
+        /* Read it, and clear its current value */
         LastChar = Channel->IBuffer[RawChannelGetIBufferIndex(Channel)];
-        Channel->IBuffer[RawChannelGetIBufferIndex(Channel)] = 0;
+        Channel->IBuffer[RawChannelGetIBufferIndex(Channel)] = ANSI_NULL;
     }
 
+    /* Return the last character */
     return LastChar;
 }
 
@@ -347,27 +352,34 @@ RawChannelIWrite(IN PSAC_CHANNEL Channel,
     NTSTATUS Status;
     BOOLEAN IsFull;
     ULONG Index;
-
     CHECK_PARAMETER1(Channel);
     CHECK_PARAMETER2(Buffer);
     CHECK_PARAMETER_WITH_STATUS(BufferSize > 0, STATUS_INVALID_BUFFER_SIZE);
 
+    /* First, check if the input buffer still has space */
     Status = RawChannelIBufferIsFull(Channel, &IsFull);
     if (!NT_SUCCESS(Status)) return Status;
-
     if (IsFull) return STATUS_UNSUCCESSFUL;
 
+    /* Get the current buffer index */
     Index = RawChannelGetIBufferIndex(Channel);
-    if ((SAC_RAW_IBUFFER_SIZE - Index) >= BufferSize) return STATUS_INSUFFICIENT_RESOURCES;
+    if ((SAC_RAW_IBUFFER_SIZE - Index) < BufferSize)
+    {
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
 
+    /* Copy the new data */
     RtlCopyMemory(&Channel->IBuffer[Index], Buffer, BufferSize);
 
+    /* Update the index */
     RawChannelSetIBufferIndex(Channel, BufferSize + Index);
 
+    /* Signal the event, if one was set */
     if (Channel->Flags & SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT)
     {
         ChannelSetEvent(Channel, HasNewDataEvent);
     }
 
+    /* All done */
     return STATUS_SUCCESS;
 }
index fef618c..17fd296 100644 (file)
@@ -35,6 +35,7 @@
 #define SAC_DBG_UTIL                        0x02
 #define SAC_DBG_INIT                        0x04
 #define SAC_DBG_MM                          0x1000
+#define SAC_DBG_MACHINE                     0x2000
 #define SAC_DBG(x, ...)                     \
     if (SACDebug & x)                       \
     {                                       \
 #define SAC_MAX_CHANNELS                    10
 #define SAC_SERIAL_PORT_BUFFER_SIZE         1024                // 1KB
 #define SAC_MAX_MESSAGES                    200
+#define SAC_VTUTF8_COL_WIDTH                80
+#define SAC_VTUTF8_COL_HEIGHT               25
 
 //
 // Channel flags
@@ -300,7 +303,7 @@ ULONG
 );
 
 typedef
-CHAR
+WCHAR
 (NTAPI *PSAC_CHANNEL_IREAD_LAST)(
     IN struct _SAC_CHANNEL* Channel
 );
@@ -765,6 +768,35 @@ ChannelDestroy(
     IN PSAC_CHANNEL Channel
 );
 
+NTSTATUS
+NTAPI
+ChannelIWrite(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR Buffer,
+    IN ULONG BufferSize
+);
+
+WCHAR
+NTAPI
+ChannelIReadLast(
+    IN PSAC_CHANNEL Channel
+);
+
+ULONG
+NTAPI
+ChannelIBufferLength(
+    IN PSAC_CHANNEL Channel
+);
+
+NTSTATUS
+NTAPI
+ChannelIRead(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR Buffer,
+    IN ULONG BufferSize,
+    IN OUT PULONG ResultBufferSize
+);
+
 //
 // RAW Channel Table
 //
@@ -833,7 +865,7 @@ RawChannelIBufferLength(
     IN PSAC_CHANNEL Channel
 );
 
-CHAR
+WCHAR
 NTAPI
 RawChannelIReadLast(
     IN PSAC_CHANNEL Channel
@@ -847,9 +879,106 @@ RawChannelIWrite(
     IN ULONG BufferSize
 );
 
+//
+// VT-UTF8 Channel Table
+//
+NTSTATUS
+NTAPI
+VTUTF8ChannelCreate(
+    IN PSAC_CHANNEL Channel
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelDestroy(
+    IN PSAC_CHANNEL Channel
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelORead(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR Buffer,
+    IN ULONG BufferSize,
+    OUT PULONG ByteCount
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelOEcho(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR String,
+    IN ULONG Length
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelOFlush(
+    IN PSAC_CHANNEL Channel
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelOWrite(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR String,
+    IN ULONG Length
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelIRead(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR Buffer,
+    IN ULONG BufferSize,
+    IN PULONG ReturnBufferSize
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelIBufferIsFull(
+    IN PSAC_CHANNEL Channel,
+    OUT PBOOLEAN BufferStatus
+);
+
+ULONG
+NTAPI
+VTUTF8ChannelIBufferLength(
+    IN PSAC_CHANNEL Channel
+);
+
+WCHAR
+NTAPI
+VTUTF8ChannelIReadLast(
+    IN PSAC_CHANNEL Channel
+);
+
+NTSTATUS
+NTAPI
+VTUTF8ChannelIWrite(
+    IN PSAC_CHANNEL Channel,
+    IN PCHAR Buffer,
+    IN ULONG BufferSize
+);
+
+
 //
 // Helper Routines
 //
+BOOLEAN
+NTAPI
+SacTranslateUtf8ToUnicode(
+    IN CHAR Utf8Char,
+    IN PCHAR Utf8Buffer,
+    OUT PWCHAR Utf8Value
+);
+
+ULONG
+NTAPI
+GetMessageLineCount(
+    IN ULONG MessageIndex
+);
+
 NTSTATUS
 NTAPI
 SerialBufferGetChar(
@@ -892,6 +1021,102 @@ DoRebootCommand(
     IN BOOLEAN Reboot
 );
 
+VOID
+NTAPI
+DoFullInfoCommand(
+    VOID
+);
+
+VOID
+NTAPI
+DoPagingCommand(
+    VOID
+);
+
+VOID
+NTAPI
+DoSetTimeCommand(
+    IN PCHAR InputTime
+);
+
+VOID
+NTAPI
+DoKillCommand(
+    IN PCHAR KillString
+);
+
+VOID
+NTAPI
+DoLowerPriorityCommand(
+    IN PCHAR PrioString
+);
+
+VOID
+NTAPI
+DoRaisePriorityCommand(
+    IN PCHAR PrioString
+);
+
+VOID
+NTAPI
+DoLimitMemoryCommand(
+    IN PCHAR LimitString
+);
+
+VOID
+NTAPI
+DoCrashCommand(
+    VOID
+);
+
+VOID
+NTAPI
+DoMachineInformationCommand(
+    VOID
+);
+
+VOID
+NTAPI
+DoChannelCommand(
+    IN PCHAR ChannelString
+);
+
+VOID
+NTAPI
+DoCmdCommand(
+    IN PCHAR InputString
+);
+
+VOID
+NTAPI
+DoLockCommand(
+    VOID
+);
+
+VOID
+NTAPI
+DoHelpCommand(
+    VOID
+);
+
+VOID
+NTAPI
+DoGetNetInfo(
+    IN BOOLEAN DoPrint
+);
+
+VOID
+NTAPI
+DoSetIpAddressCommand(
+    IN PCHAR IpString
+);
+
+VOID
+NTAPI
+DoTlistCommand(
+    VOID
+);
+
 //
 // External data
 //
@@ -900,8 +1125,11 @@ extern PSAC_MESSAGE_ENTRY GlobalMessageTable;
 extern KMUTEX CurrentChannelLock;
 extern LONG CurrentChannelRefCount;
 extern PCHAR SerialPortBuffer;
+extern LONG SerialPortConsumerIndex, SerialPortProducerIndex;
 extern PCHAR Utf8ConversionBuffer;
+extern BOOLEAN GlobalPagingNeeded;
 extern ULONG Utf8ConversionBufferSize;
+extern BOOLEAN CommandConsoleLaunchingEnabled;
 
 //
 // Function to initailize a SAC Semaphore Lock
@@ -1014,3 +1242,11 @@ ChannelGetIndex(IN PSAC_CHANNEL Channel)
     /* Return the index of the channel */
     return Channel->Index;
 }
+
+FORCEINLINE
+BOOLEAN
+ChannelHasNewIBufferData(IN PSAC_CHANNEL Channel)
+{
+    /* Return if there's any new data in the input buffer */
+    return Channel->ChannelHasNewIBufferData;
+}
index 32daaac..29330c0 100644 (file)
 /* GLOBALS *******************************************************************/
 
 PCHAR Utf8ConversionBuffer;
-ULONG Utf8ConversionBufferSize;
+ULONG Utf8ConversionBufferSize = PAGE_SIZE;
+
 PSAC_MACHINE_INFO MachineInformation;
+
 PVOID RequestSacCmdEventObjectBody;
 PKEVENT RequestSacCmdEventWaitObjectBody;
 PVOID RequestSacCmdSuccessEventObjectBody;
@@ -32,6 +34,56 @@ PCHAR SerialPortBuffer;
 
 /* FUNCTIONS *****************************************************************/
 
+BOOLEAN
+NTAPI
+SacTranslateUtf8ToUnicode(IN CHAR Utf8Char,
+                          IN PCHAR Utf8Buffer,
+                          OUT PWCHAR Utf8Value)
+{
+    ULONG i;
+
+    /* Find out how many valid characters we have in the buffer */
+    i = 0;
+    while (Utf8Buffer[i++] && (i < 3));
+
+    /* If we have at least 3, shift everything by a byte */
+    if (i >= 3)
+    {
+        /* The last input character goes at the end */
+        Utf8Buffer[0] = Utf8Buffer[1];
+        Utf8Buffer[1] = Utf8Buffer[2];
+        Utf8Buffer[2] = Utf8Char;
+    }
+    else
+    {
+        /* We don't have more than 3 characters, place the input at the index */
+        Utf8Buffer[i] = Utf8Char;
+    }
+
+    /* Print to debugger */
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SacTranslateUtf8ToUnicode - About to decode the UTF8 buffer.\n");
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "                                  UTF8[0]: 0x%02lx UTF8[1]: 0x%02lx UTF8[2]: 0x%02lx\n",
+            Utf8Buffer[0],
+            Utf8Buffer[1],
+            Utf8Buffer[2]);
+
+    /* Is this a simple ANSI character? */
+    if (!(Utf8Char & 0x80))
+    {
+        /* Return it as Unicode, nothing left to do */
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SACDRV: SacTranslateUTf8ToUnicode - Case1\n");
+        *Utf8Value = (WCHAR)Utf8Char;
+        Utf8Buffer[0] = Utf8Buffer[1];
+        Utf8Buffer[1] = Utf8Buffer[2];
+        Utf8Buffer[2] = UNICODE_NULL;
+        return TRUE;
+    }
+
+    /* Anything else is not yet supported */
+    ASSERT(FALSE);
+    return FALSE;
+}
+
 BOOLEAN
 NTAPI
 SacTranslateUnicodeToUtf8(IN PWCHAR SourceBuffer,
@@ -41,8 +93,43 @@ SacTranslateUnicodeToUtf8(IN PWCHAR SourceBuffer,
                           OUT PULONG UTF8Count,
                           OUT PULONG ProcessedCount)
 {
-    ASSERT(FALSE);
-    return FALSE;
+    *UTF8Count = 0;
+    *ProcessedCount = 0;
+
+    while ((*SourceBuffer) &&
+           (*UTF8Count < DestinationBufferSize) &&
+           (*ProcessedCount < SourceBufferLength))
+    {
+        if (*SourceBuffer & 0xFF80)
+        {
+            if (*SourceBuffer & 0xF800)
+            {
+                if ((*UTF8Count + 3) >= DestinationBufferSize) break;
+                DestinationBuffer[*UTF8Count] = ((*SourceBuffer >> 12) & 0xF) | 0xE0;
+                ++*UTF8Count;
+                DestinationBuffer[*UTF8Count] = ((*SourceBuffer >> 6) & 0x3F) | 0x80;
+            }
+            else
+            {
+                if ((*UTF8Count + 2) >= DestinationBufferSize) break;
+                DestinationBuffer[*UTF8Count] = ((*SourceBuffer >> 6) & 31) | 0xC0;
+            }
+            ++*UTF8Count;
+            DestinationBuffer[*UTF8Count] = (*SourceBuffer & 0x3F) | 0x80;
+        }
+        else
+        {
+            DestinationBuffer[*UTF8Count] = (*SourceBuffer & 0x7F);
+        }
+
+        ++*UTF8Count;
+        ++*ProcessedCount;
+        ++SourceBuffer;
+    }
+
+    ASSERT(*ProcessedCount <= SourceBufferLength);
+    ASSERT(*UTF8Count <= DestinationBufferSize);
+    return TRUE;
 }
 
 PWCHAR
@@ -114,15 +201,83 @@ SacFormatMessage(IN PWCHAR FormattedString,
                  IN PWCHAR MessageString,
                  IN ULONG MessageSize)
 {
-    /* FIXME: For now don't format anything */
-    wcsncpy(FormattedString, MessageString, MessageSize / sizeof(WCHAR));
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC SacFormatMessage: Entering.\n");
+
+    /* Check if any of the parameters are NULL or zero */
+    if (!(MessageString) || !(FormattedString) || !(MessageSize))
+    {
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC SacFormatMessage: Exiting with invalid parameters.\n");
+        return;
+    }
+
+    /* Keep going as long as there's still characters */
+    while ((MessageString[0]) && (MessageSize))
+    {
+        /* Is it a non-formatting character? */
+        if (MessageString[0] != L'%')
+        {
+            /* Just write it back into the buffer and keep going */
+            *FormattedString++ = MessageString[0];
+            MessageString++;
+        }
+        else
+        {
+            /* Go over the format characters we recognize */
+            switch (MessageString[1])
+            {
+                case L'0':
+                    *FormattedString = UNICODE_NULL;
+                    return;
+
+                case L'%':
+                    *FormattedString++ = L'%';
+                    break;
+
+                case L'\\':
+                    *FormattedString++ = L'\r';
+                    *FormattedString++ = L'\n';
+                    break;
+
+                case L'r':
+                    *FormattedString++ = L'\r';
+                    break;
+
+                case L'b':
+                    *FormattedString++ = L' ';
+                    break;
+
+                case L'.':
+                    *FormattedString++ = L'.';
+                    break;
+
+                case L'!':
+                    *FormattedString++ = L'!';
+                    break;
+
+                default:
+                    /* Only move forward one character */
+                    MessageString--;
+                    break;
+            }
+
+            /* Move forward two characters */
+            MessageString += 2;
+        }
+
+        /* Move to the next character*/
+        MessageSize--;
+    }
+
+    /* All done */
+    *FormattedString = UNICODE_NULL;
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC SacFormatMessage: Exiting.\n");
 }
 
 NTSTATUS
 NTAPI
 PreloadGlobalMessageTable(IN PVOID ImageBase)
 {
-    NTSTATUS Status;
+    NTSTATUS Status, Status2;
     ULONG MessageId, TotalLength, TextSize, i;
     PWCHAR StringBuffer;
     PMESSAGE_RESOURCE_ENTRY MessageEntry;
@@ -130,6 +285,7 @@ PreloadGlobalMessageTable(IN PVOID ImageBase)
     SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC PreloadGlobalMessageTable: Entering.\n");
 
     /* Nothing to do if we already have a table */
+    Status = STATUS_SUCCESS;
     if (GlobalMessageTable) goto Exit;
 
     /* Loop through up to 200 messages */
@@ -137,12 +293,12 @@ PreloadGlobalMessageTable(IN PVOID ImageBase)
     for (MessageId = 1; MessageId != SAC_MAX_MESSAGES; MessageId++)
     {
         /* Find this message ID in the string table*/
-        Status = RtlFindMessage(ImageBase,
-                                11,
-                                LANG_NEUTRAL,
-                                MessageId,
-                                &MessageEntry);
-        if (NT_SUCCESS(Status))
+        Status2 = RtlFindMessage(ImageBase,
+                                 11,
+                                 LANG_NEUTRAL,
+                                 MessageId,
+                                 &MessageEntry);
+        if (NT_SUCCESS(Status2))
         {
             /* Make sure it's Unicode */
             ASSERT(MessageEntry->Flags & MESSAGE_RESOURCE_UNICODE);
@@ -182,12 +338,12 @@ PreloadGlobalMessageTable(IN PVOID ImageBase)
     for (i = 0, MessageId = 1; MessageId != SAC_MAX_MESSAGES; MessageId++)
     {
         /* Make sure the message is still there...! */
-        Status = RtlFindMessage(ImageBase,
-                                11,
-                                LANG_NEUTRAL,
-                                MessageId,
-                                &MessageEntry);
-        if (NT_SUCCESS(Status))
+        Status2 = RtlFindMessage(ImageBase,
+                                 11,
+                                 LANG_NEUTRAL,
+                                 MessageId,
+                                 &MessageEntry);
+        if (NT_SUCCESS(Status2))
         {
             /* Write the entry in the message table*/
             GlobalMessageTable[i].Index = MessageId;
@@ -202,7 +358,7 @@ PreloadGlobalMessageTable(IN PVOID ImageBase)
             ASSERT((ULONG)(wcslen(StringBuffer)*sizeof(WCHAR)) <= TextSize);
 
             /* Move to the next buffer space */
-            StringBuffer += TextSize;
+            StringBuffer += (TextSize / sizeof(WCHAR));
 
             /* Move to the next entry, make sure the status is full success */
             i++;
@@ -229,135 +385,6 @@ TearDownGlobalMessageTable(VOID)
     return STATUS_SUCCESS;
 }
 
-NTSTATUS
-NTAPI
-TranslateMachineInformationXML(IN PWCHAR *Buffer,
-                               IN PWCHAR ExtraData)
-{
-    NTSTATUS Status;
-    ULONG Size;
-    PWCHAR p;
-    CHECK_PARAMETER1(Buffer);
-
-    Status = STATUS_SUCCESS;
-    Size = wcslen(L"<machine-info>\r\n");
-
-    if (MachineInformation->MachineName)
-    {
-        Size += wcslen(MachineInformation->MachineName);
-        Size += wcslen(L"<name>%s</name>\r\n");
-    }
-
-    if (MachineInformation->MachineGuid)
-    {
-        Size += wcslen(MachineInformation->MachineGuid);
-        Size += wcslen(L"<guid>%s</guid>\r\n");
-    }
-
-    if (MachineInformation->ProcessorArchitecture)
-    {
-        Size += wcslen(MachineInformation->ProcessorArchitecture);
-        Size += wcslen(L"<processor-architecture>%s</processor-architecture>\r\n");
-    }
-
-    if (MachineInformation->MajorVersion)
-    {
-        Size += wcslen(MachineInformation->MajorVersion);
-        Size += wcslen(L"<os-version>%s</os-version>\r\n");
-    }
-
-    if (MachineInformation->BuildNumber)
-    {
-        Size += wcslen(MachineInformation->BuildNumber);
-        Size += wcslen(L"<os-build-number>%s</os-build-number>\r\n");
-    }
-
-    if (MachineInformation->ProductType)
-    {
-        Size += wcslen(MachineInformation->ProductType);
-        Size += wcslen(L"<os-product>%s</os-product>\r\n");
-    }
-
-    if (MachineInformation->ServicePack)
-    {
-        Size += wcslen(MachineInformation->ServicePack);
-        Size += wcslen(L"<os-service-pack>%s</os-service-pack>\r\n");
-    }
-
-    if (ExtraData) Size += wcslen(ExtraData);
-
-    Size += wcslen(L"</machine-info>\r\n");
-
-    p = (PWCHAR)SacAllocatePool((Size + sizeof(ANSI_NULL)) * sizeof(WCHAR), GLOBAL_BLOCK_TAG);
-
-    *Buffer = p;
-    if (!p) return STATUS_NO_MEMORY;
-
-    Size = wcslen(L"<machine-info>\r\n");
-    wcscpy(p, L"<machine-info>\r\n");
-
-    p += Size;
-
-    if (MachineInformation->MachineName)
-    {
-        p += swprintf(p, L"<name>%s</name>\r\n", MachineInformation->MachineName);
-    }
-
-    if (MachineInformation->MachineGuid)
-    {
-        p += swprintf(p, L"<guid>%s</guid>\r\n", MachineInformation->MachineGuid);
-    }
-
-    if (MachineInformation->ProcessorArchitecture)
-    {
-        p += swprintf(p, L"<processor-architecture>%s</processor-architecture>\r\n", MachineInformation->ProcessorArchitecture);
-    }
-
-    if (MachineInformation->MajorVersion)
-    {
-        p += swprintf(p, L"<os-version>%s</os-version>\r\n", MachineInformation->MajorVersion);
-    }
-
-    if (MachineInformation->BuildNumber)
-    {
-        p += swprintf(p, L"<os-build-number>%s</os-build-number>\r\n", MachineInformation->BuildNumber);
-    }
-
-    if (MachineInformation->ProductType)
-    {
-        p += swprintf(p, L"<os-product>%s</os-product>\r\n", MachineInformation->ProductType);
-    }
-
-    if (MachineInformation->ServicePack)
-    {
-        p += swprintf(p, L"<os-service-pack>%s</os-service-pack>\r\n", MachineInformation->ServicePack);
-    }
-
-    if (ExtraData)
-    {
-        Size = wcslen(ExtraData);
-        wcscpy(p, ExtraData);
-        p += Size;
-    }
-
-    wcscpy(p, L"</machine-info>\r\n");
-    ASSERT((((ULONG) wcslen(*Buffer) + 1) * sizeof(WCHAR)) <= Size);
-    return Status;
-}
-
-VOID
-NTAPI
-InitializeMachineInformation(VOID)
-{
-    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC Initialize Machine Information : Entering.\n");
-
-    /* FIXME: TODO */
-    MachineInformation = NULL;
-    ASSERT(FALSE);
-
-    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC Initialize Machine Information : Exiting with error.\n");
-}
-
 NTSTATUS
 NTAPI
 GetRegistryValueBuffer(IN PCWSTR KeyName,
@@ -479,7 +506,7 @@ SetRegistryValue(IN PCWSTR KeyName,
 
 NTSTATUS
 NTAPI
-CopyRegistryValueData(IN PULONG* Buffer,
+CopyRegistryValueData(IN PVOID* Buffer,
                       IN PKEY_VALUE_PARTIAL_INFORMATION PartialInfo)
 {
     NTSTATUS Status = STATUS_SUCCESS;
@@ -504,6 +531,446 @@ CopyRegistryValueData(IN PULONG* Buffer,
     return Status;
 }
 
+NTSTATUS
+NTAPI
+TranslateMachineInformationXML(IN PWCHAR *Buffer,
+                               IN PWCHAR ExtraData)
+{
+    NTSTATUS Status;
+    ULONG Size;
+    PWCHAR p;
+    CHECK_PARAMETER1(Buffer);
+
+    /* Start by believing the world is beautiful */
+    Status = STATUS_SUCCESS;
+
+    /* First, the header */
+    Size = wcslen(L"<machine-info>\r\n");
+
+    /* Do we have a machine name? */
+    if (MachineInformation->MachineName)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->MachineName);
+        Size += wcslen(L"<name>%s</name>\r\n");
+    }
+
+    /* Do we have a GUID? */
+    if (MachineInformation->MachineGuid)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->MachineGuid);
+        Size += wcslen(L"<guid>%s</guid>\r\n");
+    }
+
+    /* Do we know the processor? */
+    if (MachineInformation->ProcessorArchitecture)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->ProcessorArchitecture);
+        Size += wcslen(L"<processor-architecture>%s</processor-architecture>\r\n");
+    }
+
+    /* Do we have the version? */
+    if (MachineInformation->MajorVersion)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->MajorVersion);
+        Size += wcslen(L"<os-version>%s</os-version>\r\n");
+    }
+
+    /* Do we have the build? */
+    if (MachineInformation->BuildNumber)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->BuildNumber);
+        Size += wcslen(L"<os-build-number>%s</os-build-number>\r\n");
+    }
+
+    /* Do we have the product type? */
+    if (MachineInformation->ProductType)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->ProductType);
+        Size += wcslen(L"<os-product>%s</os-product>\r\n");
+    }
+
+    /* Do we have a service pack? */
+    if (MachineInformation->ServicePack)
+    {
+        /* Go and add it in */
+        Size += wcslen(MachineInformation->ServicePack);
+        Size += wcslen(L"<os-service-pack>%s</os-service-pack>\r\n");
+    }
+
+    /* Anything else we need to know? Add it in too */
+    if (ExtraData) Size += wcslen(ExtraData);
+
+    /* Finally, add the footer */
+    Size += wcslen(L"</machine-info>\r\n");
+
+    /* Convert to bytes and add a NULL */
+    Size += sizeof(ANSI_NULL);
+    Size *= sizeof(WCHAR);
+
+    /* Allocate space for the buffer */
+    p = SacAllocatePool(Size, GLOBAL_BLOCK_TAG);
+    *Buffer = p;
+    if (!p) return STATUS_NO_MEMORY;
+
+    wcscpy(p, L"<machine-info>\r\n");
+    p += wcslen(L"<machine-info>\r\n");;
+
+    if (MachineInformation->MachineName)
+    {
+        p += swprintf(p,
+                      L"<name>%s</name>\r\n",
+                      MachineInformation->MachineName);
+    }
+
+    if (MachineInformation->MachineGuid)
+    {
+        p += swprintf(p,
+                      L"<guid>%s</guid>\r\n",
+                      MachineInformation->MachineGuid);
+    }
+
+    if (MachineInformation->ProcessorArchitecture)
+    {
+        p += swprintf(p,
+                      L"<processor-architecture>%s</processor-architecture>\r\n",
+                      MachineInformation->ProcessorArchitecture);
+    }
+
+    if (MachineInformation->MajorVersion)
+    {
+        p += swprintf(p,
+                      L"<os-version>%s</os-version>\r\n",
+                      MachineInformation->MajorVersion);
+    }
+
+    if (MachineInformation->BuildNumber)
+    {
+        p += swprintf(p,
+                      L"<os-build-number>%s</os-build-number>\r\n",
+                      MachineInformation->BuildNumber);
+    }
+
+    if (MachineInformation->ProductType)
+    {
+        p += swprintf(p,
+                      L"<os-product>%s</os-product>\r\n",
+                      MachineInformation->ProductType);
+    }
+
+    if (MachineInformation->ServicePack)
+    {
+        p += swprintf(p,
+                      L"<os-service-pack>%s</os-service-pack>\r\n",
+                      MachineInformation->ServicePack);
+    }
+
+    if (ExtraData)
+    {
+        wcscpy(p, ExtraData);
+        p += wcslen(ExtraData);
+    }
+
+    wcscpy(p, L"</machine-info>\r\n");
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "MachineInformation: %S\n", *Buffer);
+    ASSERT((((ULONG)wcslen(*Buffer) + 1) * sizeof(WCHAR)) <= Size);
+    return Status;
+}
+
+VOID
+NTAPI
+InitializeMachineInformation(VOID)
+{
+    NTSTATUS Status;
+    PWCHAR GuidString, MajorVersion, ServicePack, BuildNumber, MessageBuffer;
+    PWCHAR ProductType;
+    ULONG SuiteTypeMessage;
+    BOOLEAN SetupInProgress = FALSE;
+    GUID SystemGuid;
+    ULONG RealSize, Size, OutputSize;
+    PKEY_VALUE_PARTIAL_INFORMATION PartialInfo;
+    RTL_OSVERSIONINFOEXW VersionInformation;
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC Initialize Machine Information : Entering.\n");
+
+    /* Don't do anything if we already quried this */
+    if (MachineInformation)
+    {
+        SAC_DBG(SAC_DBG_MACHINE, "SAC Initialize Machine Information:: MachineInformationBuffer already initialzied.\n");
+        return;
+    }
+
+    /* Allocate the machine information */
+    MachineInformation = SacAllocatePool(sizeof(*MachineInformation),
+                                         GLOBAL_BLOCK_TAG);
+    if (!MachineInformation)
+    {
+        goto Fail;
+    }
+
+    /* Zero it out for now */
+    RtlZeroMemory(MachineInformation, sizeof(*MachineInformation));
+
+    /* Query OS version */
+    RtlZeroMemory(&VersionInformation, sizeof(VersionInformation));
+    VersionInformation.dwOSVersionInfoSize = sizeof(VersionInformation);
+    Status = RtlGetVersion((PRTL_OSVERSIONINFOW)&VersionInformation);
+    if (!NT_SUCCESS(Status))
+    {
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (2).\n");
+        goto Fail;
+    }
+
+    /* Check if setup is in progress */
+    Status = GetRegistryValueBuffer(L"\\Registry\\Machine\\System\\Setup",
+                                    L"SystemSetupInProgress",
+                                    &PartialInfo);
+    if (NT_SUCCESS(Status))
+    {
+        /* The key is there, is the value set? */
+        if (*(PULONG)PartialInfo->Data) SetupInProgress = TRUE;
+        SacFreePool(PartialInfo);
+        if (SetupInProgress)
+        {
+            /* Yes, so we'll use a special hostname to identify this */
+            MessageBuffer = GetMessage(SAC_UNINITIALIZED_MSG);
+            Size = wcslen(MessageBuffer);
+            ASSERT(Size > 0);
+            RealSize = Size * sizeof(WCHAR) + sizeof(UNICODE_NULL);
+
+            /* Make room for it and copy it in there */
+            MachineInformation->MachineName = SacAllocatePool(RealSize,
+                                                              GLOBAL_BLOCK_TAG);
+            if (MachineInformation->MachineName)
+            {
+                wcscpy(MachineInformation->MachineName, MessageBuffer);
+            }
+        }
+    }
+
+    /* If we are not in setup mode, or if we failed to check... */
+    if (!SetupInProgress)
+    {
+        /* Query the computer name */
+        Status = GetRegistryValueBuffer(L"\\Registry\\Machine\\System\\"
+                                        L"CurrentControlSet\\Control\\"
+                                        L"ComputerName\\ComputerName",
+                                        L"ComputerName",
+                                        &PartialInfo);
+        if (!NT_SUCCESS(Status))
+        {
+            /* It's not critical, but we won't have it */
+            SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Failed to get machine name.\n");
+        }
+        else
+        {
+            /* We have the name, copy it from the registry */
+            Status = CopyRegistryValueData((PVOID*)&MachineInformation->
+                                           MachineName,
+                                           PartialInfo);
+            SacFreePool(PartialInfo);
+            if (!NT_SUCCESS(Status))
+            {
+                SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (20).\n");
+                goto Fail;
+            }
+        }
+    }
+
+    /* Next step, try to get the machine GUID */
+    RtlZeroMemory(&SystemGuid, sizeof(SystemGuid));
+    OutputSize = sizeof(SystemGuid);
+    Status = HeadlessDispatch(HeadlessCmdQueryGUID,
+                              NULL,
+                              0,
+                              &SystemGuid,
+                              &OutputSize);
+    if (!NT_SUCCESS(Status))
+    {
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Failed to get Machine GUID.\n");
+    }
+    else
+    {
+        /* We have it -- make room for it */
+        GuidString = SacAllocatePool(0x50, GLOBAL_BLOCK_TAG);
+        if (!GuidString)
+        {
+            SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (31).\n");
+            goto Fail;
+        }
+
+        /* Build the string with the GUID in it, and save the ppointer to it */
+        swprintf(GuidString,
+                 L"%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+                 SystemGuid.Data1,
+                 SystemGuid.Data2,
+                 SystemGuid.Data3,
+                 SystemGuid.Data4[0],
+                 SystemGuid.Data4[1],
+                 SystemGuid.Data4[2],
+                 SystemGuid.Data4[3],
+                 SystemGuid.Data4[4],
+                 SystemGuid.Data4[5],
+                 SystemGuid.Data4[6],
+                 SystemGuid.Data4[7]);
+        MachineInformation->MachineGuid = GuidString;
+    }
+
+    /* Next, query the processor architecture */
+    Status = GetRegistryValueBuffer(L"\\Registry\\Machine\\System\\"
+                                    L"CurrentControlSet\\Control\\"
+                                    L"Session Manager\\Environment",
+                                    L"PROCESSOR_ARCHITECTURE",
+                                    &PartialInfo);
+    if (!NT_SUCCESS(Status))
+    {
+        /* It's not critical, but we won't have it */
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (30).\n");
+    }
+    else
+    {
+        /* We have it! Copy the value from the registry */
+        Status = CopyRegistryValueData((PVOID*)&MachineInformation->
+                                       ProcessorArchitecture,
+                                       PartialInfo);
+        SacFreePool(PartialInfo);
+        if (!NT_SUCCESS(Status))
+        {
+            SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (30).\n");
+            goto Fail;
+        }
+    }
+
+    /* Now allocate a buffer for the OS version number */
+    MajorVersion = SacAllocatePool(0x18, GLOBAL_BLOCK_TAG);
+    if (!MajorVersion)
+    {
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (50).\n");
+        goto Fail;
+    }
+
+    /* Build the buffer and set a pointer to it */
+    swprintf(MajorVersion,
+             L"%d.%d",
+             VersionInformation.dwMajorVersion,
+             VersionInformation.dwMinorVersion);
+    MachineInformation->MajorVersion = MajorVersion;
+
+    /* Now allocate a buffer for the OS build number */
+    BuildNumber = SacAllocatePool(0xC, GLOBAL_BLOCK_TAG);
+    if (!BuildNumber)
+    {
+        SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC InitializeMachineInformation: Exiting (60).\n");
+        goto Fail;
+    }
+
+    /* Build the buffer and set a pointer to it */
+    swprintf(BuildNumber, L"%d", VersionInformation.dwBuildNumber);
+    MachineInformation->BuildNumber = BuildNumber;
+
+    /* Now check what kind of SKU this is */
+    if (ExVerifySuite(DataCenter))
+    {
+        SuiteTypeMessage = SAC_DATACENTER_SUITE_MSG;
+    }
+    else if (ExVerifySuite(EmbeddedNT))
+    {
+        SuiteTypeMessage = SAC_EMBEDDED_SUITE_MSG;
+    }
+    else if (ExVerifySuite(Enterprise))
+    {
+        SuiteTypeMessage = SAC_ENTERPRISE_SUITE_MSG;
+    }
+    else
+    {
+        /* Unknown or perhaps a client SKU */
+        SuiteTypeMessage = SAC_NO_SUITE_MSG;
+    }
+
+    /* Get the string that correponds to the SKU type */
+    MessageBuffer = GetMessage(SuiteTypeMessage);
+    if (!MessageBuffer)
+    {
+        /* We won't have it, but this isn't critical */
+        SAC_DBG(SAC_DBG_INIT, "SAC InitializeMachineInformation: Failed to get product type.\n");
+    }
+    else
+    {
+        /* Calculate the size we need to hold the string */
+        Size = wcslen(MessageBuffer);
+        ASSERT(Size > 0);
+        RealSize = Size * sizeof(WCHAR) + sizeof(UNICODE_NULL);
+
+        /* Allocate a buffer for it */
+        ProductType = SacAllocatePool(RealSize, GLOBAL_BLOCK_TAG);
+        if (!ProductType)
+        {
+            SAC_DBG(SAC_DBG_INIT, "SAC InitializeMachineInformation: Failed product type memory allocation.\n");
+            goto Fail;
+        }
+
+        /* Copy the string and set the pointer */
+        RtlCopyMemory(ProductType, MessageBuffer, RealSize);
+        MachineInformation->ProductType = ProductType;
+    }
+
+    /* Check if this is a SP version or RTM version */
+    if (VersionInformation.wServicePackMajor)
+    {
+        /* This is a service pack, allocate a buffer for the version */
+        ServicePack = SacAllocatePool(0x18, GLOBAL_BLOCK_TAG);
+        if (ServicePack)
+        {
+            /* Build the buffer and set a pointer to it */
+            swprintf(ServicePack,
+                     L"%d.%d",
+                     VersionInformation.wServicePackMajor,
+                     VersionInformation.wServicePackMinor);
+            MachineInformation->ServicePack = ServicePack;
+
+            /* We've collected all the machine info and are done! */
+            return;
+        }
+
+        /* This is the failure path */
+        SAC_DBG(SAC_DBG_INIT, "SAC InitializeMachineInformation: Failed service pack memory allocation.\n");
+    }
+    else
+    {
+        /* Get a generic string that indicates there's no service pack */
+        MessageBuffer = GetMessage(SAC_NO_DATA_MSG);
+        Size = wcslen(MessageBuffer);
+        ASSERT(Size > 0);
+        RealSize = Size * sizeof(WCHAR) + sizeof(UNICODE_NULL);
+
+        /* Allocate memory for the "no service pack" string */
+        ServicePack = SacAllocatePool(RealSize, GLOBAL_BLOCK_TAG);
+        if (ServicePack)
+        {
+            /* Copy the buffer and set a pointer to it */
+            RtlCopyMemory(ServicePack, MessageBuffer, RealSize);
+            MachineInformation->ServicePack = ServicePack;
+
+            /* We've collected all the machine info and are done! */
+            return;
+        }
+
+        SAC_DBG(SAC_DBG_INIT, "SAC InitializeMachineInformation: Failed service pack memory allocation.\n");
+    }
+
+Fail:
+    /* In the failure path, always cleanup the machine information buffer */
+    if (MachineInformation)
+    {
+        SacFreePool(MachineInformation);
+    }
+    SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC Initialize Machine Information : Exiting with error.\n");
+}
+
 NTSTATUS
 NTAPI
 GetCommandConsoleLaunchingPermission(OUT PBOOLEAN Permission)
@@ -549,7 +1016,7 @@ ImposeSacCmdServiceStartTypePolicy(VOID)
     if (!Buffer) return STATUS_UNSUCCESSFUL;
 
     /* Read the value */
-    Status = CopyRegistryValueData(&Data, Buffer);
+    Status = CopyRegistryValueData((PVOID*)&Data, Buffer);
     SacFreePool(Buffer);
     if (!NT_SUCCESS(Status)) return Status;
 
@@ -632,7 +1099,7 @@ NTAPI
 RegisterBlueScreenMachineInformation(VOID)
 {
     PWCHAR XmlBuffer;
-    PHEADLESS_BLUE_SCREEN_DATA BsBuffer;
+    PHEADLESS_CMD_SET_BLUE_SCREEN_DATA BsBuffer;
     ULONG Length, HeaderLength, TotalLength;
     NTSTATUS Status;
     ULONG i;
@@ -653,15 +1120,15 @@ RegisterBlueScreenMachineInformation(VOID)
     CHECK_PARAMETER_WITH_STATUS(BsBuffer, STATUS_NO_MEMORY);
 
     /* Copy the XML property name */
-    strcpy((PCHAR)BsBuffer->XMLData, "MACHINEINFO");
-    BsBuffer->Property = (PUCHAR)HeaderLength + sizeof(ANSI_NULL);
+    strcpy((PCHAR)BsBuffer->Data, "MACHINEINFO");
+    BsBuffer->ValueIndex = HeaderLength + sizeof(ANSI_NULL);
 
     /* Copy the data and NULL-terminate it */
     for (i = 0; i < Length; i++)
     {
-        BsBuffer->XMLData[HeaderLength + sizeof(ANSI_NULL) + i] = XmlBuffer[i];
+        BsBuffer->Data[BsBuffer->ValueIndex + i] = XmlBuffer[i];
     }
-    BsBuffer->XMLData[HeaderLength + sizeof(ANSI_NULL) + i] = ANSI_NULL;
+    BsBuffer->Data[BsBuffer->ValueIndex + i] = ANSI_NULL;
 
     /* Let the OS save the buffer for later */
     Status = HeadlessDispatch(HeadlessCmdSetBlueScreenData,
@@ -756,6 +1223,25 @@ SerialBufferGetChar(OUT PCHAR Char)
     return STATUS_SUCCESS;
 }
 
+ULONG
+NTAPI
+GetMessageLineCount(IN ULONG MessageIndex)
+{
+    ULONG LineCount = 0;
+    PWCHAR Buffer;
+
+    /* Get the message buffer */
+    Buffer = GetMessage(MessageIndex);
+    if (Buffer)
+    {
+        /* Scan it looking for new lines, and increment the conut each time */
+        while (*Buffer) if (*Buffer++ == L'\n') ++LineCount;
+    }
+
+    /* Return the line count */
+    return LineCount;
+}
+
 ULONG
 ConvertAnsiToUnicode(
        IN PWCHAR pwch,
@@ -782,16 +1268,6 @@ InvokeUserModeService(
        return STATUS_NOT_IMPLEMENTED;
 }
 
-BOOLEAN
-SacTranslateUtf8ToUnicode(
-       IN CHAR Utf8Char,
-       IN PCHAR UnicodeBuffer, 
-       OUT PCHAR Utf8Value
-       )
-{
-       return FALSE;
-}
-
 NTSTATUS
 TranslateMachineInformationText(
        IN PWCHAR Buffer)
@@ -810,14 +1286,6 @@ CopyAndInsertStringAtInterval(
        return STATUS_NOT_IMPLEMENTED;
 }
 
-ULONG
-GetMessageLineCount(
-       IN ULONG MessageIndex
-       )
-{
-       return 0;
-}
-
 NTSTATUS
 RegisterSacCmdEvent(
        IN PVOID Object,
index 26f80d8..946a90c 100644 (file)
 /*
- * PROJECT:             ReactOS Boot Loader
- * LICENSE:             BSD - See COPYING.ARM in the top level directory
- * FILE:                drivers/sac/driver/vtutf8chan.c
- * PURPOSE:             Driver for the Server Administration Console (SAC) for EMS
- * PROGRAMMERS:         ReactOS Portable Systems Group
+ * PROJECT:     ReactOS Drivers
+ * LICENSE:     BSD - See COPYING.ARM in the top level directory
+ * FILE:        drivers/sac/driver/vtutf8chan.c
+ * PURPOSE:     Driver for the Server Administration Console (SAC) for EMS
+ * PROGRAMMERS: ReactOS Portable Systems Group
  */
 
-/* INCLUDES *******************************************************************/
+/* INCLUDES ******************************************************************/
 
 #include "sacdrv.h"
 
-/* GLOBALS ********************************************************************/
+/* GLOBALS *******************************************************************/
 
-/* FUNCTIONS ******************************************************************/
+CHAR IncomingUtf8ConversionBuffer[4];
+WCHAR IncomingUnicodeValue;
+
+/* FUNCTIONS *****************************************************************/
+
+typedef struct _SAC_CURSOR_DATA
+{
+    UCHAR CursorX;
+    UCHAR CursorY;
+    UCHAR CursorVisible;
+    WCHAR CursorValue;
+} SAC_CURSOR_DATA, *PSAC_CURSOR_DATA;
+
+C_ASSERT(sizeof(SAC_CURSOR_DATA) == 6);
+
+#define SAC_VTUTF8_OBUFFER_SIZE 0x2D00
+#define SAC_VTUTF8_IBUFFER_SIZE 0x2000
 
 NTSTATUS
-VTUTF8ChannelCreate(
-       IN PSAC_CHANNEL Channel
-       )
+NTAPI
+VTUTF8ChannelOInit(IN PSAC_CHANNEL Channel)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    PSAC_CURSOR_DATA Cursor;
+    ULONG x, y;
+    CHECK_PARAMETER(Channel);
+
+    /* Set the current channel cursor parameters */
+    Channel->CursorVisible = 0;
+    Channel->CursorX = 40;
+    Channel->CursorY = 37;
+
+    /* Loop the output buffer height by width */
+    Cursor = (PSAC_CURSOR_DATA)Channel->OBuffer;
+    y = SAC_VTUTF8_COL_HEIGHT - 1;
+    do
+    {
+        x = SAC_VTUTF8_COL_WIDTH;
+        do
+        {
+            /* For every character, set the defaults */
+            Cursor->CursorValue = ' ';
+            Cursor->CursorX = 40;
+            Cursor->CursorY = 38;
+
+            /* Move to the next character */
+            Cursor++;
+        } while (--x);
+    } while (--y);
+
+    /* All done */
+    return STATUS_SUCCESS;
 }
 
 NTSTATUS
-VTUTF8ChannelDestroy(
-       IN PSAC_CHANNEL Channel
-       )
+NTAPI
+VTUTF8ChannelCreate(IN PSAC_CHANNEL Channel)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS Status;
+    CHECK_PARAMETER(Channel);
+
+    /* Allocate the output buffer */
+    Channel->OBuffer = SacAllocatePool(SAC_VTUTF8_OBUFFER_SIZE, GLOBAL_BLOCK_TAG);
+    CHECK_ALLOCATION(Channel->OBuffer);
+
+    /* Allocate the input buffer */
+    Channel->IBuffer = SacAllocatePool(SAC_VTUTF8_IBUFFER_SIZE, GLOBAL_BLOCK_TAG);
+    CHECK_ALLOCATION(Channel->IBuffer);
+
+    /* Initialize the output stream */
+    Status = VTUTF8ChannelOInit(Channel);
+    if (NT_SUCCESS(Status)) return Status;
+
+    /* Reset all flags and return success */
+    _InterlockedExchange(&Channel->ChannelHasNewOBufferData, 0);
+    _InterlockedExchange(&Channel->ChannelHasNewIBufferData, 0);
+    return STATUS_SUCCESS;
 }
 
 NTSTATUS
-VTUTF8ChannelORead(
-       IN PSAC_CHANNEL Channel,
-       IN PCHAR Buffer,
-       IN ULONG BufferSize,
-       OUT PULONG ByteCount
-       )
+NTAPI
+VTUTF8ChannelDestroy(IN PSAC_CHANNEL Channel)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    CHECK_PARAMETER(Channel);
+
+    /* Free the buffer and then destroy the channel */
+    if (Channel->OBuffer) SacFreePool(Channel->OBuffer);
+    if (Channel->IBuffer) SacFreePool(Channel->IBuffer);
+    return ChannelDestroy(Channel);
 }
 
 NTSTATUS
-VTUTF8ChannelOEcho(
+NTAPI
+VTUTF8ChannelORead(
        IN PSAC_CHANNEL Channel,
-       IN PWCHAR String,
-       IN ULONG Size
+       IN PCHAR Buffer,
+       IN ULONG BufferSize,
+       OUT PULONG ByteCount
        )
 {
        return STATUS_NOT_IMPLEMENTED;
 }
 
 BOOLEAN
+NTAPI
 VTUTF8ChannelScanForNumber(
        IN PWCHAR String,
        OUT PULONG Number
@@ -61,6 +125,7 @@ VTUTF8ChannelScanForNumber(
 }
 
 NTSTATUS
+NTAPI
 VTUTF8ChannelAnsiDispatch(
        IN NTSTATUS Status,
        IN ULONG AnsiCode,
@@ -72,6 +137,7 @@ VTUTF8ChannelAnsiDispatch(
 }
 
 NTSTATUS
+NTAPI
 VTUTF8ChannelProcessAttributes(
        IN PSAC_CHANNEL Channel,
        IN UCHAR Attribute
@@ -80,24 +146,8 @@ VTUTF8ChannelProcessAttributes(
        return STATUS_NOT_IMPLEMENTED;
 }
 
-ULONG
-VTUTF8ChannelGetIBufferIndex(
-       IN PSAC_CHANNEL Channel
-       )
-{
-       return 0;
-}
-
-VOID
-VTUTF8ChannelSetIBufferIndex(
-       IN PSAC_CHANNEL Channel,
-       IN ULONG BufferIndex
-       )
-{
-
-}
-
 NTSTATUS
+NTAPI
 VTUTF8ChannelConsumeEscapeSequence(
        IN PSAC_CHANNEL Channel,
        IN PWCHAR String
@@ -107,6 +157,7 @@ VTUTF8ChannelConsumeEscapeSequence(
 }
 
 NTSTATUS
+NTAPI
 VTUTF8ChannelOFlush(
        IN PSAC_CHANNEL Channel
        )
@@ -115,67 +166,240 @@ VTUTF8ChannelOFlush(
 }
 
 NTSTATUS
-VTUTF8ChannelIRead(
-       IN PSAC_CHANNEL Channel,
-       IN PCHAR Buffer,
-       IN ULONG BufferSize,
-       IN PULONG ReturnBufferSize
-       )
+NTAPI
+VTUTF8ChannelOWrite2(IN PSAC_CHANNEL Channel,
+                     IN PCHAR String,
+                     IN ULONG Size)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 NTSTATUS
-VTUTF8ChannelIBufferIsFull(
-       IN PSAC_CHANNEL Channel,
-       OUT PBOOLEAN BufferStatus
-       )
+NTAPI
+VTUTF8ChannelOEcho(IN PSAC_CHANNEL Channel,
+                   IN PCHAR String,
+                   IN ULONG Size)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
 }
 
-WCHAR
-VTUTF8ChannelIReadLast(
-       IN PSAC_CHANNEL Channel
-       )
+NTSTATUS
+NTAPI
+VTUTF8ChannelOWrite(IN PSAC_CHANNEL Channel,
+                    IN PCHAR String,
+                    IN ULONG Length)
 {
-       return 0;
+    NTSTATUS Status;
+    CHECK_PARAMETER1(Channel);
+    CHECK_PARAMETER2(String);
+
+    /* Call the lower level function */
+    Status = VTUTF8ChannelOWrite2(Channel, String, Length / sizeof(WCHAR));
+    if (NT_SUCCESS(Status))
+    {
+        /* Is the channel enabled for output? */
+        if ((ConMgrIsWriteEnabled(Channel)) && (Channel->WriteEnabled))
+        {
+            /* Go ahead and output it */
+            Status = VTUTF8ChannelOEcho(Channel, String, Length);
+        }
+        else
+        {
+            /* Otherwise, just remember that we have new data */
+            _InterlockedExchange(&Channel->ChannelHasNewOBufferData, 1);
+        }
+    }
+
+    /* We're done */
+    return Status;
 }
 
 ULONG
-VTUTF8ChannelIBufferLength(
-       IN PSAC_CHANNEL Channel
-       )
+NTAPI
+VTUTF8ChannelGetIBufferIndex(IN PSAC_CHANNEL Channel)
 {
-       return 0;
+    ASSERT(Channel);
+    ASSERT((Channel->IBufferIndex % sizeof(WCHAR)) == 0);
+    ASSERT(Channel->IBufferIndex < SAC_VTUTF8_IBUFFER_SIZE);
+
+    /* Return the current buffer index */
+    return Channel->IBufferIndex;
+}
+
+VOID
+NTAPI
+VTUTF8ChannelSetIBufferIndex(IN PSAC_CHANNEL Channel,
+                             IN ULONG BufferIndex)
+{
+    NTSTATUS Status;
+    ASSERT(Channel);
+    ASSERT((Channel->IBufferIndex % sizeof(WCHAR)) == 0);
+    ASSERT(Channel->IBufferIndex < SAC_VTUTF8_IBUFFER_SIZE);
+
+    /* Set the new index, and if it's not zero, it means we have data */
+    Channel->IBufferIndex = BufferIndex;
+    _InterlockedExchange(&Channel->ChannelHasNewIBufferData, BufferIndex != 0);
+
+    /* If we have new data, and an event has been registered... */
+    if (!(Channel->IBufferIndex) &&
+        (Channel->Flags & SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT))
+    {
+        /* Go ahead and signal it */
+        ChannelClearEvent(Channel, HasNewDataEvent);
+        UNREFERENCED_PARAMETER(Status);
+    }
 }
 
 NTSTATUS
-VTUTF8ChannelOWrite2(
-       IN PSAC_CHANNEL Channel,
-       IN PWCHAR String,
-       IN ULONG Size
-       )
+NTAPI
+VTUTF8ChannelIRead(IN PSAC_CHANNEL Channel,
+                   IN PCHAR Buffer,
+                   IN ULONG BufferSize,
+                   IN PULONG ReturnBufferSize)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    ULONG CopyChars;
+    CHECK_PARAMETER1(Channel);
+    CHECK_PARAMETER2(Buffer);
+    CHECK_PARAMETER_WITH_STATUS(BufferSize > 0, STATUS_INVALID_BUFFER_SIZE);
+
+    /* Assume failure */
+    *ReturnBufferSize = 0;
+
+    /* Check how many bytes are in the buffer */
+    if (Channel->ChannelInputBufferLength(Channel) == 0)
+    {
+        /* Apparently nothing. Make sure the flag indicates so too */
+        ASSERT(ChannelHasNewIBufferData(Channel) == FALSE);
+    }
+    else
+    {
+        /* Use the smallest number of bytes either in the buffer or requested */
+        CopyChars = min(Channel->ChannelInputBufferLength(Channel) * sizeof(WCHAR),
+                        BufferSize);
+        ASSERT(CopyChars <= Channel->ChannelInputBufferLength(Channel));
+
+        /* Copy them into the caller's buffer */
+        RtlCopyMemory(Buffer, Channel->IBuffer, CopyChars);
+
+        /* Update the channel's index past the copied (read) bytes */
+        VTUTF8ChannelSetIBufferIndex(Channel,
+                                     VTUTF8ChannelGetIBufferIndex(Channel) - CopyChars);
+
+        /* Are there still bytes that haven't been read yet? */
+        if (Channel->ChannelInputBufferLength(Channel))
+        {
+            /* Shift them up in the buffer */
+            RtlMoveMemory(Channel->IBuffer,
+                          &Channel->IBuffer[CopyChars],
+                          Channel->ChannelInputBufferLength(Channel) *
+                          sizeof(WCHAR));
+        }
+
+        /* Return the number of bytes we actually copied */
+        *ReturnBufferSize = CopyChars;
+    }
+
+    /* Return success */
+    return STATUS_SUCCESS;
 }
 
 NTSTATUS
-VTUTF8ChannelIWrite(
-       IN PSAC_CHANNEL Channel,
-       IN PCHAR Buffer,
-       IN ULONG BufferSize
-       )
+NTAPI
+VTUTF8ChannelIBufferIsFull(IN PSAC_CHANNEL Channel,
+                           OUT PBOOLEAN BufferStatus)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    CHECK_PARAMETER1(Channel);
+
+    /* If the index is beyond the length, the buffer must be full */
+    *BufferStatus = VTUTF8ChannelGetIBufferIndex(Channel) > SAC_VTUTF8_IBUFFER_SIZE;
+    return STATUS_SUCCESS;
+}
+
+ULONG
+NTAPI
+VTUTF8ChannelIBufferLength(IN PSAC_CHANNEL Channel)
+{
+    ASSERT(Channel);
+
+    /* The index is the length, so divide by two to get character count */
+    return VTUTF8ChannelGetIBufferIndex(Channel) / sizeof(WCHAR);
+}
+
+WCHAR
+NTAPI
+VTUTF8ChannelIReadLast(IN PSAC_CHANNEL Channel)
+{
+    PWCHAR LastCharLocation;
+    WCHAR LastChar = 0;
+    ASSERT(Channel);
+
+    /* Check if there's anything to read in the buffer */
+    if (Channel->ChannelInputBufferLength(Channel))
+    {
+        /* Go back one character */
+        VTUTF8ChannelSetIBufferIndex(Channel,
+                                     VTUTF8ChannelGetIBufferIndex(Channel) -
+                                     sizeof(WCHAR));
+
+        /* Read it, and clear its current value */
+        LastCharLocation = (PWCHAR)&Channel->IBuffer[VTUTF8ChannelGetIBufferIndex(Channel)];
+        LastChar = *LastCharLocation;
+        *LastCharLocation = UNICODE_NULL;
+    }
+
+    /* Return the last character */
+    return LastChar;
 }
 
 NTSTATUS
-VTUTF8ChannelOWrite(
-       IN PSAC_CHANNEL Channel,
-       IN PWCHAR String,
-       IN ULONG Length
-       )
+NTAPI
+VTUTF8ChannelIWrite(IN PSAC_CHANNEL Channel,
+                    IN PCHAR Buffer,
+                    IN ULONG BufferSize)
 {
-       return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS Status;
+    BOOLEAN IsFull;
+    ULONG Index, i;
+    CHECK_PARAMETER1(Channel);
+    CHECK_PARAMETER2(Buffer);
+    CHECK_PARAMETER_WITH_STATUS(BufferSize > 0, STATUS_INVALID_BUFFER_SIZE);
+
+    /* First, check if the input buffer still has space */
+    Status = VTUTF8ChannelIBufferIsFull(Channel, &IsFull);
+    if (!NT_SUCCESS(Status)) return Status;
+    if (IsFull) return STATUS_UNSUCCESSFUL;
+
+    /* Get the current buffer index */
+    Index = VTUTF8ChannelGetIBufferIndex(Channel);
+    if ((SAC_VTUTF8_IBUFFER_SIZE - Index) < BufferSize)
+    {
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
+    /* Copy the new data */
+    for (i = 0; i < BufferSize; i++)
+    {
+        /* Convert the character */
+        if (SacTranslateUtf8ToUnicode(Buffer[i],
+                                      IncomingUtf8ConversionBuffer,
+                                      &IncomingUnicodeValue))
+        {
+            /* Write it into the buffer */
+            *(PWCHAR)&Channel->IBuffer[VTUTF8ChannelGetIBufferIndex(Channel)] =
+                IncomingUnicodeValue;
+
+            /* Update the index */
+            Index = VTUTF8ChannelGetIBufferIndex(Channel);
+            VTUTF8ChannelSetIBufferIndex(Channel, Index + sizeof(WCHAR));
+        }
+    }
+
+    /* Signal the event, if one was set */
+    if (Channel->Flags & SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT)
+    {
+        ChannelSetEvent(Channel, HasNewDataEvent);
+    }
+
+    /* All done */
+    return STATUS_SUCCESS;
 }
index 87ec6e3..b897196 100644 (file)
@@ -3,6 +3,7 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER within this package.
  */
+
 #ifndef _INC_MBSTRING
 #define _INC_MBSTRING
 
@@ -390,13 +391,13 @@ extern "C" {
     _In_ size_t _Count);
 
   _CRTIMP
-  int
+  errno_t
   __cdecl
   _mbsnbcpy_s(
-    _Out_writes_z_(size) unsigned char* dst,
-    _In_ size_t size,
-    _In_z_ const unsigned char* src,
-    _In_ size_t n);
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount);
 
   _CRTIMP
   unsigned char*
index 98d97ba..7a77367 100644 (file)
 extern "C" {
 #endif
 
-  _CRTIMP errno_t __cdecl _cgets_s(char *_Buffer,size_t _Size,size_t *_SizeRead);
-  _CRTIMP int __cdecl _cprintf_s(const char *_Format,...);
-  _CRTIMP int __cdecl _cscanf_s(const char *_Format,...);
-  _CRTIMP int __cdecl _cscanf_s_l(const char *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vcprintf_s(const char *_Format,va_list _ArgList);
-  _CRTIMP int __cdecl _cprintf_s_l(const char *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vcprintf_s_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _cgets_s(
+    _Out_writes_z_(_Size) char *_Buffer,
+    _In_ size_t _Size,
+    _Out_ size_t *_SizeRead);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cprintf_s(
+    _In_z_ _Printf_format_string_ const char *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cscanf_s(
+    _In_z_ _Scanf_s_format_string_ const char *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cscanf_s_l(
+    _In_z_ _Scanf_s_format_string_ const char *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vcprintf_s(
+    _In_z_ _Printf_format_string_ const char *_Format,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cprintf_s_l(
+    _In_z_ _Printf_format_string_ const char *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vcprintf_s_l(
+    _In_z_ _Printf_format_string_ const char *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
 
 #ifndef _WCONIO_DEFINED_S
 #define _WCONIO_DEFINED_S
-  _CRTIMP errno_t __cdecl _cgetws_s(wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
-  _CRTIMP int __cdecl _cwprintf_s(const wchar_t *_Format,...);
-  _CRTIMP int __cdecl _cwscanf_s(const wchar_t *_Format,...);
-  _CRTIMP int __cdecl _cwscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vcwprintf_s(const wchar_t *_Format,va_list _ArgList);
-  _CRTIMP int __cdecl _cwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vcwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
-#endif
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _cgetws_s(
+    _Out_writes_to_(_SizeInWords, *_SizeRead) wchar_t *_Buffer,
+    _In_ size_t _SizeInWords,
+    _Out_ size_t *_SizeRead);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cwprintf_s(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cwscanf_s(
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cwscanf_s_l(
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vcwprintf_s(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    va_list _ArgList);
+
+  _CRTIMP
+  int
+  __cdecl
+  _cwprintf_s_l(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _CRTIMP
+  int
+  __cdecl
+  _vcwprintf_s_l(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
+
+#endif /* _WCONIO_DEFINED_S */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif
-#endif
+#endif /* MINGW_HAS_SECURE_API */
+
+#endif /* _INC_CONIO_S */
index 6b2b188..35e0efd 100644 (file)
@@ -3,6 +3,7 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER within this package.
  */
+
 #ifndef _INC_MBSTRING_S
 #define _INC_MBSTRING_S
 
@@ -16,37 +17,246 @@ extern "C" {
 
 #ifndef _MBSTRING_S_DEFINED
 #define _MBSTRING_S_DEFINED
-  _CRTIMP errno_t __cdecl _mbscat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src);
-  _CRTIMP errno_t __cdecl _mbscat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbscpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src);
-  _CRTIMP errno_t __cdecl _mbscpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbslwr_s(unsigned char *_Str,size_t _SizeInBytes);
-  _CRTIMP errno_t __cdecl _mbslwr_s_l(unsigned char *_Str,size_t _SizeInBytes,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsnbcat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _mbsnbcat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsnbcpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _mbsnbcpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsnbset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Ch,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _mbsnbset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Ch,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsncat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _mbsncat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsncpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _mbsncpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsnset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _mbsnset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val);
-  _CRTIMP errno_t __cdecl _mbsset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,_locale_t _Locale);
-  _CRTIMP unsigned char *__cdecl _mbstok_s(unsigned char *_Str,const unsigned char *_Delim,unsigned char **_Context);
-  _CRTIMP unsigned char *__cdecl _mbstok_s_l(unsigned char *_Str,const unsigned char *_Delim,unsigned char **_Context,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbsupr_s(unsigned char *_Str,size_t _SizeInBytes);
-  _CRTIMP errno_t __cdecl _mbsupr_s_l(unsigned char *_Str,size_t _SizeInBytes,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _mbccpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,int *_PCopied,const unsigned char *_Src);
-  _CRTIMP errno_t __cdecl _mbccpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,int *_PCopied,const unsigned char *_Src,_locale_t _Locale);
-#endif
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbscat_s(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbscat_s_l(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbscpy_s(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbscpy_s_l(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbslwr_s(
+    _Inout_updates_opt_z_(_SizeInBytes) unsigned char *_Str,
+    _In_ size_t _SizeInBytes);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbslwr_s_l(
+    _Inout_updates_opt_z_(_SizeInBytes) unsigned char *_Str,
+    _In_ size_t _SizeInBytes,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnbcat_s(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnbcat_s_l(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnbcpy_s(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnbcpy_s_l(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnbset_s(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_ unsigned int _Ch,
+    _In_ size_t _MaxCount);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnbset_s_l(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_ unsigned int _Ch,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsncat_s(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsncat_s_l(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsncpy_s(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsncpy_s_l(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_z_ const unsigned char *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnset_s(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_ unsigned int _Val,
+    _In_ size_t _MaxCount);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsnset_s_l(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_ unsigned int _Val,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsset_s(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_ unsigned int _Val);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsset_s_l(
+    _Inout_updates_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _In_ unsigned int _Val,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_
+  _CRTIMP
+  unsigned char *
+  __cdecl
+  _mbstok_s(
+    _Inout_opt_z_ unsigned char *_Str,
+    _In_z_ const unsigned char *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ unsigned char **_Context);
+
+  _Check_return_
+  _CRTIMP
+  unsigned char *
+  __cdecl
+  _mbstok_s_l(
+    _Inout_opt_z_ unsigned char *_Str,
+    _In_z_ const unsigned char *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ unsigned char **_Context,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsupr_s(
+    _Inout_updates_z_(_SizeInBytes) unsigned char *_Str,
+    _In_ size_t _SizeInBytes);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbsupr_s_l(
+    _Inout_updates_z_(_SizeInBytes) unsigned char *_Str,
+    _In_ size_t _SizeInBytes,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbccpy_s(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _Out_opt_ int *_PCopied,
+    _In_z_ const unsigned char *_Src);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _mbccpy_s_l(
+    _Out_writes_z_(_DstSizeInBytes) unsigned char *_Dst,
+    _In_ size_t _DstSizeInBytes,
+    _Out_opt_ int *_PCopied,
+    _In_z_ const unsigned char *_Src,
+    _In_opt_ _locale_t _Locale);
+
+#endif /* _MBSTRING_S_DEFINED */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif
-#endif
+#endif /* MINGW_HAS_SECURE_API */
+
+#endif /* _INC_MBSTRING_S */
index 24d6032..0516c0b 100644 (file)
@@ -3,6 +3,7 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER within this package.
  */
+
 #ifndef _INC_STRING_S
 #define _INC_STRING_S
 
 extern "C" {
 #endif
 
-  _CRTIMP errno_t __cdecl _strset_s(char *_Dst,size_t _DstSize,int _Value);
-  _CRTIMP errno_t __cdecl _strerror_s(char *_Buf,size_t _SizeInBytes,const char *_ErrMsg);
-  _CRTIMP errno_t __cdecl _strlwr_s(char *_Str,size_t _Size);
-  _CRTIMP errno_t __cdecl _strlwr_s_l(char *_Str,size_t _Size,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _strnset_s(char *_Str,size_t _Size,int _Val,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _strupr_s(char *_Str,size_t _Size);
-  _CRTIMP errno_t __cdecl _strupr_s_l(char *_Str,size_t _Size,_locale_t _Locale);
-
-  _CRTIMP errno_t __cdecl strncat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _strncat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl strcpy_s(char *_Dst, size_t _SizeInBytes, const char *_Src);
-  _CRTIMP errno_t __cdecl strncpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _strncpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP char *__cdecl strtok_s(char *_Str,const char *_Delim,char **_Context);
-  _CRTIMP char *__cdecl _strtok_s_l(char *_Str,const char *_Delim,char **_Context,_locale_t _Locale);
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strset_s(
+    _Inout_updates_z_(_DstSize) char *_Dst,
+    _In_ size_t _DstSize,
+    _In_ int _Value);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strerror_s(
+    _Out_writes_z_(_SizeInBytes) char *_Buf,
+    _In_ size_t _SizeInBytes,
+    _In_opt_z_ const char *_ErrMsg);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strlwr_s(
+    _Inout_updates_z_(_Size) char *_Str,
+    _In_ size_t _Size);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strlwr_s_l(
+    _Inout_updates_z_(_Size) char *_Str,
+    _In_ size_t _Size,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strnset_s(
+    _Inout_updates_z_(_Size) char *_Str,
+    _In_ size_t _Size,
+    _In_ int _Val,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strupr_s(
+    _Inout_updates_z_(_Size) char *_Str,
+    _In_ size_t _Size);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strupr_s_l(
+    _Inout_updates_z_(_Size) char *_Str,
+    _In_ size_t _Size,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  strncat_s(
+    _Inout_updates_z_(_DstSizeInChars) char *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const char *_Src,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strncat_s_l(
+    _Inout_updates_z_(_DstSizeInChars) char *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const char *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  strcpy_s(
+    _Out_writes_z_(_SizeInBytes) char *_Dst,
+    _In_ size_t _SizeInBytes,
+    _In_z_ const char *_Src);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  strncpy_s(
+    _Out_writes_z_(_DstSizeInChars) char *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const char *_Src,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _strncpy_s_l(
+    _Out_writes_z_(_DstSizeInChars) char *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const char *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_
+  _CRTIMP
+  char *
+  __cdecl
+  strtok_s(
+    _Inout_opt_z_ char *_Str,
+    _In_z_ const char *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ char **_Context);
+
+  _Check_return_
+  _CRTIMP
+  char *
+  __cdecl
+  _strtok_s_l(
+    _Inout_opt_z_ char *_Str,
+    _In_z_ const char *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ char **_Context,
+    _In_opt_ _locale_t _Locale);
 
 #ifndef _WSTRING_S_DEFINED
 #define _WSTRING_S_DEFINED
-  _CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context);
-  _CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum);
-  _CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg);
-  _CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val);
-  _CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords);
-  _CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size);
-  _CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale);
-
-  _CRTIMP errno_t __cdecl wcsncat_s(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _wcsncat_s_l(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl wcsncpy_s(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _wcsncpy_s_l(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP wchar_t *__cdecl _wcstok_s_l(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _wcsset_s_l(wchar_t *_Str,size_t _SizeInChars,unsigned int _Val,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _wcsnset_s_l(wchar_t *_Str,size_t _SizeInChars,unsigned int _Val, size_t _Count,_locale_t _Locale);
 
-#endif
+  _Check_return_
+  _CRTIMP
+  wchar_t *
+  __cdecl
+  wcstok_s(
+    _Inout_opt_z_ wchar_t *_Str,
+    _In_z_ const wchar_t *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ wchar_t **_Context);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcserror_s(
+    _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buf,
+    _In_ size_t _SizeInWords,
+    _In_ int _ErrNum);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  __wcserror_s(
+    _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buffer,
+    _In_ size_t _SizeInWords,
+    _In_z_ const wchar_t *_ErrMsg);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsnset_s(
+    _Inout_updates_z_(_DstSizeInWords) wchar_t *_Dst,
+    _In_ size_t _DstSizeInWords,
+    _In_ wchar_t _Val,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsset_s(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords,
+    _In_ wchar_t _Val);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcslwr_s(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcslwr_s_l(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsupr_s(
+    _Inout_updates_z_(_Size) wchar_t *_Str,
+    _In_ size_t _Size);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsupr_s_l(
+    _Inout_updates_z_(_Size) wchar_t *_Str,
+    _In_ size_t _Size,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  wcsncat_s(
+    _Inout_updates_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsncat_s_l(
+    _Inout_updates_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  wcsncpy_s(
+    _Out_writes_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsncpy_s_l(
+    _Out_writes_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  wchar_t *
+  __cdecl
+  _wcstok_s_l(
+    _Inout_opt_z_ wchar_t *_Str,
+    _In_z_ const wchar_t *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ wchar_t **_Context,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsset_s_l(
+    _Inout_updates_z_(_SizeInChars) wchar_t *_Str,
+    _In_ size_t _SizeInChars,
+    _In_ unsigned int _Val,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsnset_s_l(
+    _Inout_updates_z_(_SizeInChars) wchar_t *_Str,
+    _In_ size_t _SizeInChars,
+    _In_ unsigned int _Val,
+    _In_ size_t _Count,
+    _In_opt_ _locale_t _Locale);
+
+#endif /* _WSTRING_S_DEFINED */
 
 #ifdef __cplusplus
 }
 #endif
-#endif
-#endif
+
+#endif /* MINGW_HAS_SECURE_API */
+
+#endif /* _INC_STRING_S */
index 41c401f..e311f96 100644 (file)
@@ -22,6 +22,7 @@
 
 #pragma once
 
+#ifndef _CFGMGR32_H_
 #define _CFGMGR32_H_
 
 #include <cfg.h>
@@ -69,14 +70,14 @@ typedef DWORDLONG *PDWORDLONG;
 
 #endif /* NT_INCLUDED */
 
-typedef DWORD RETURN_TYPE;
+typedef _Return_type_success_(return == 0) DWORD RETURN_TYPE;
 typedef RETURN_TYPE CONFIGRET;
 
 typedef DWORD DEVNODE, DEVINST;
 typedef DEVNODE *PDEVNODE, *PDEVINST;
 
-typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
-typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
+typedef _Null_terminated_ CHAR *DEVNODEID_A, *DEVINSTID_A;
+typedef _Null_terminated_ WCHAR *DEVNODEID_W, *DEVINSTID_W;
 
 #ifdef UNICODE
 typedef DEVNODEID_W DEVNODEID;
@@ -953,54 +954,54 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Add_Empty_Log_Conf(
-  OUT PLOG_CONF plcLogConf,
-  IN DEVINST dnDevInst,
-  IN PRIORITY Priority,
-  IN ULONG ulFlags);
+  _Out_ PLOG_CONF plcLogConf,
+  _In_ DEVINST dnDevInst,
+  _In_ PRIORITY Priority,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_Empty_Log_Conf_Ex(
-  OUT PLOG_CONF plcLogConf,
-  IN DEVINST dnDevInst,
-  IN PRIORITY Priority,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PLOG_CONF plcLogConf,
+  _In_ DEVINST dnDevInst,
+  _In_ PRIORITY Priority,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_IDA(
-  IN DEVINST dnDevInst,
-  IN PSTR pszID,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ PSTR pszID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_ID_ExA(
-  IN DEVINST dnDevInst,
-  IN PSTR pszID,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ PSTR pszID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_ID_ExW(
-  IN DEVINST dnDevInst,
-  IN PWSTR pszID,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ PWSTR pszID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_IDW(
-  IN DEVINST dnDevInst,
-  IN PWSTR pszID,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ PWSTR pszID,
+  _In_ ULONG ulFlags);
 
 #ifdef UNICODE
 #define CM_Add_ID CM_Add_IDW
@@ -1014,47 +1015,47 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Add_Range(
-  IN DWORDLONG ullStartValue,
-  IN DWORDLONG ullEndValue,
-  IN RANGE_LIST rlh,
-  IN ULONG ulFlags);
+  _In_ DWORDLONG ullStartValue,
+  _In_ DWORDLONG ullEndValue,
+  _In_ RANGE_LIST rlh,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_Res_Des(
-  OUT PRES_DES prdResDes OPTIONAL,
-  IN LOG_CONF lcLogConf,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  IN ULONG ulFlags);
+  _Out_opt_ PRES_DES prdResDes,
+  _In_ LOG_CONF lcLogConf,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Add_Res_Des_Ex(
-  OUT PRES_DES prdResDes OPTIONAL,
-  IN LOG_CONF lcLogConf,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_opt_ PRES_DES prdResDes,
+  _In_ LOG_CONF lcLogConf,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Connect_MachineA(
-  IN PCSTR UNCServerName OPTIONAL,
-  OUT PHMACHINE phMachine);
+  _In_opt_ PCSTR UNCServerName,
+  _Out_ PHMACHINE phMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Connect_MachineW(
-  IN PCWSTR UNCServerName OPTIONAL,
-  OUT PHMACHINE phMachine);
+  _In_opt_ PCWSTR UNCServerName,
+  _Out_ PHMACHINE phMachine);
 
 #ifdef UNICODE
 #define CM_Connect_Machine CM_Connect_MachineW
@@ -1066,39 +1067,39 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Create_DevNodeA(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_A pDeviceID,
-  IN DEVINST dnParent,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINSTID_A pDeviceID,
+  _In_ DEVINST dnParent,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Create_DevNodeW(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_W pDeviceID,
-  IN DEVINST dnParent,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINSTID_W pDeviceID,
+  _In_ DEVINST dnParent,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Create_DevNode_ExA(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_A pDeviceID,
-  IN DEVINST dnParent,
-  IN ULONG ulFlags,
-  IN HANDLE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINSTID_A pDeviceID,
+  _In_ DEVINST dnParent,
+  _In_ ULONG ulFlags,
+  _In_opt_ HANDLE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Create_DevNode_ExW(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_W pDeviceID,
-  IN DEVINST dnParent,
-  IN ULONG ulFlags,
-  IN HANDLE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINSTID_W pDeviceID,
+  _In_ DEVINST dnParent,
+  _In_ ULONG ulFlags,
+  _In_opt_ HANDLE hMachine);
 
 #define CM_Create_DevInstW CM_Create_DevNodeW
 #define CM_Create_DevInstA CM_Create_DevNodeA
@@ -1120,40 +1121,40 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Create_Range_List(
-  OUT PRANGE_LIST prlh,
-  IN ULONG ulFlags);
+  _Out_ PRANGE_LIST prlh,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Class_Key(
-  IN LPGUID ClassGuid,
-  IN ULONG ulFlags);
+  _In_ LPGUID ClassGuid,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Class_Key_Ex(
-  IN LPGUID ClassGuid,
-  IN ULONG ulFlags,
-  IN HANDLE hMachine);
+  _In_ LPGUID ClassGuid,
+  _In_ ULONG ulFlags,
+  _In_opt_ HANDLE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_DevNode_Key(
-  IN DEVNODE dnDevNode,
-  IN ULONG ulHardwareProfile,
-  IN ULONG ulFlags);
+  _In_ DEVNODE dnDevNode,
+  _In_ ULONG ulHardwareProfile,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_DevNode_Key_Ex(
-  IN DEVNODE dnDevNode,
-  IN ULONG ulHardwareProfile,
-  IN ULONG ulFlags,
-  IN HANDLE hMachine);
+  _In_ DEVNODE dnDevNode,
+  _In_ ULONG ulHardwareProfile,
+  _In_ ULONG ulFlags,
+  _In_opt_ HANDLE hMachine);
 
 #define CM_Delete_DevInst_Key CM_Delete_DevNode_Key
 #define CM_Delete_DevInst_Key_Ex CM_Delete_DevNode_Key_Ex
@@ -1162,48 +1163,48 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Range(
-  IN DWORDLONG ullStartValue,
-  IN DWORDLONG ullEndValue,
-  IN RANGE_LIST rlh,
-  IN ULONG ulFlags);
+  _In_ DWORDLONG ullStartValue,
+  _In_ DWORDLONG ullEndValue,
+  _In_ RANGE_LIST rlh,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Detect_Resource_Conflict(
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  OUT PBOOL pbConflictDetected,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _Out_ PBOOL pbConflictDetected,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Detect_Resource_Conflict_Ex(
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  OUT PBOOL pbConflictDetected,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _Out_ PBOOL pbConflictDetected,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Disable_DevNode(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Disable_DevNode_Ex(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Disable_DevInst CM_Disable_DevNode
 #define CM_Disable_DevInst_Ex CM_Disable_DevNode_Ex
@@ -1212,30 +1213,30 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Disconnect_Machine(
-  IN HMACHINE hMachine OPTIONAL);
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Dup_Range_List(
-  IN RANGE_LIST rlhOld,
-  IN RANGE_LIST rlhNew,
-  IN ULONG ulFlags);
+  _In_ RANGE_LIST rlhOld,
+  _In_ RANGE_LIST rlhNew,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enable_DevNode(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enable_DevNode_Ex(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Enable_DevInst CM_Enable_DevNode
 #define CM_Enable_DevInst_Ex CM_Enable_DevNode_Ex
@@ -1244,56 +1245,56 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Enumerate_Classes(
-  IN ULONG ulClassIndex,
-  OUT LPGUID ClassGuid,
-  IN ULONG ulFlags);
+  _In_ ULONG ulClassIndex,
+  _Out_ LPGUID ClassGuid,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enumerate_Classes_Ex(
-  IN ULONG ulClassIndex,
-  OUT LPGUID ClassGuid,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ ULONG ulClassIndex,
+  _Out_ LPGUID ClassGuid,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enumerate_EnumeratorsA(
-  IN ULONG ulEnumIndex,
-  OUT PCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ ULONG ulEnumIndex,
+  _Out_writes_(*pulLength) PCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enumerate_Enumerators_ExA(
-  IN ULONG ulEnumIndex,
-  OUT PCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ ULONG ulEnumIndex,
+  _Out_writes_(*pulLength) PCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enumerate_Enumerators_ExW(
-  IN ULONG ulEnumIndex,
-  OUT PWCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ ULONG ulEnumIndex,
+  _Out_writes_(*pulLength) PWCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Enumerate_EnumeratorsW(
-  IN ULONG ulEnumIndex,
-  OUT PWCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ ULONG ulEnumIndex,
+  _Out_writes_(*pulLength) PWCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 #ifdef UNICODE
 #define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsW
@@ -1307,135 +1308,135 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Find_Range(
-  OUT PDWORDLONG pullStart,
-  IN DWORDLONG ullStart,
-  IN ULONG ulLength,
-  IN DWORDLONG ullAlignment,
-  IN DWORDLONG ullEnd,
-  IN RANGE_LIST rlh,
-  IN ULONG ulFlags);
+  _Out_ PDWORDLONG pullStart,
+  _In_ DWORDLONG ullStart,
+  _In_ ULONG ulLength,
+  _In_ DWORDLONG ullAlignment,
+  _In_ DWORDLONG ullEnd,
+  _In_ RANGE_LIST rlh,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_First_Range(
-  IN RANGE_LIST rlh,
-  OUT PDWORDLONG pullStart,
-  OUT PDWORDLONG pullEnd,
-  OUT PRANGE_ELEMENT preElement,
-  IN ULONG ulFlags);
+  _In_ RANGE_LIST rlh,
+  _Out_ PDWORDLONG pullStart,
+  _Out_ PDWORDLONG pullEnd,
+  _Out_ PRANGE_ELEMENT preElement,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Log_Conf(
-  IN LOG_CONF lcLogConfToBeFreed,
-  IN ULONG ulFlags);
+  _In_ LOG_CONF lcLogConfToBeFreed,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Log_Conf_Ex(
-  IN LOG_CONF lcLogConfToBeFreed,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ LOG_CONF lcLogConfToBeFreed,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Log_Conf_Handle(
-  IN LOG_CONF lcLogConf);
+  _In_ LOG_CONF lcLogConf);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Range_List(
-  IN RANGE_LIST rlh,
-  IN ULONG ulFlags);
+  _In_ RANGE_LIST rlh,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Res_Des(
-  OUT PRES_DES prdResDes,
-  IN RES_DES rdResDes,
-  IN ULONG ulFlags);
+  _Out_opt_ PRES_DES prdResDes,
+  _In_ RES_DES rdResDes,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Res_Des_Ex(
-  OUT PRES_DES prdResDes,
-  IN RES_DES rdResDes,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_opt_ PRES_DES prdResDes,
+  _In_ RES_DES rdResDes,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Res_Des_Handle(
-  IN RES_DES rdResDes);
+  _In_ RES_DES rdResDes);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Free_Resource_Conflict_Handle(
-  IN CONFLICT_LIST clConflictList);
+  _In_ CONFLICT_LIST clConflictList);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Child(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Child_Ex(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_NameA(
-  IN LPGUID ClassGuid,
-  OUT PCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) PCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_NameW(
-  IN LPGUID ClassGuid,
-  OUT PWCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) PWCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Name_ExA(
-  IN LPGUID ClassGuid,
-  OUT PCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) PCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Name_ExW(
-  IN LPGUID ClassGuid,
-  OUT PWCHAR Buffer,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) PWCHAR Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Class_Name CM_Get_Class_NameW
@@ -1449,39 +1450,39 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Key_NameA(
-  IN LPGUID ClassGuid,
-  OUT LPSTR pszKeyName,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) LPSTR pszKeyName,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Key_NameW(
-  IN LPGUID ClassGuid,
-  OUT LPWSTR pszKeyName,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) LPWSTR pszKeyName,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Key_Name_ExA(
-  IN LPGUID ClassGuid,
-  OUT LPSTR pszKeyName,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) LPSTR pszKeyName,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Key_Name_ExW(
-  IN LPGUID ClassGuid,
-  OUT LPWSTR pszKeyName,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ LPGUID ClassGuid,
+  _Out_writes_opt_(*pulLength) LPWSTR pszKeyName,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Class_Key_Name CM_Get_Class_Key_NameW
@@ -1495,56 +1496,56 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Depth(
-  OUT PULONG pulDepth,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulDepth,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Depth_Ex(
-  OUT PULONG pulDepth,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulDepth,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_IDA(
-  IN DEVINST dnDevInst,
-  OUT PCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _Out_writes_(BufferLen) PCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_ExA(
-  IN DEVINST dnDevInst,
-  OUT PCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _Out_writes_(BufferLen) PCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_ExW(
-  IN DEVINST dnDevInst,
-  OUT PWCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _Out_writes_(BufferLen) PWCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_IDW(
-  IN DEVINST dnDevInst,
-  OUT PWCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _Out_writes_(BufferLen) PWCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 #ifdef UNICODE
 #define CM_Get_Device_ID CM_Get_Device_IDW
@@ -1558,39 +1559,39 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_ListA(
-  IN PCSTR pszFilter OPTIONAL,
-  OUT PCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_opt_ PCSTR pszFilter,
+  _Out_writes_(BufferLen) PCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_List_ExA(
-  IN PCSTR pszFilter OPTIONAL,
-  OUT PCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_opt_ PCSTR pszFilter,
+  _Out_writes_(BufferLen) PCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_List_ExW(
-  IN PCWSTR pszFilter OPTIONAL,
-  OUT PWCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_opt_ PCWSTR pszFilter,
+  _Out_writes_(BufferLen) PWCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_ListW(
-  IN PCWSTR pszFilter OPTIONAL,
-  OUT PWCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_opt_ PCWSTR pszFilter,
+  _Out_writes_(BufferLen) PWCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 #ifdef UNICODE
 #define CM_Get_Device_ID_List CM_Get_Device_ID_ListW
@@ -1604,35 +1605,35 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_List_SizeA(
-  OUT PULONG pulLen,
-  IN PCSTR pszFilter OPTIONAL,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulLen,
+  _In_opt_ PCSTR pszFilter,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_List_Size_ExA(
-  OUT PULONG pulLen,
-  IN PCSTR pszFilter OPTIONAL,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulLen,
+  _In_opt_ PCSTR pszFilter,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_List_Size_ExW(
-  OUT PULONG pulLen,
-  IN PCWSTR pszFilter OPTIONAL,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulLen,
+  _In_opt_ PCWSTR pszFilter,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_List_SizeW(
-  OUT PULONG pulLen,
-  IN PCWSTR pszFilter OPTIONAL,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulLen,
+  _In_opt_ PCWSTR pszFilter,
+  _In_ ULONG ulFlags);
 
 #ifdef UNICODE
 #define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeW
@@ -1646,64 +1647,64 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_Size(
-  OUT PULONG pulLen,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulLen,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_ID_Size_Ex(
-  OUT PULONG pulLen,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulLen,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Registry_PropertyA(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Registry_PropertyW(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Registry_Property_ExA(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Registry_Property_ExW(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Get_DevInst_Registry_PropertyW CM_Get_DevNode_Registry_PropertyW
 #define CM_Get_DevInst_Registry_PropertyA CM_Get_DevNode_Registry_PropertyA
@@ -1728,47 +1729,47 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Custom_PropertyA(
-  IN DEVINST dnDevInst,
-  IN PCSTR pszCustomPropertyName,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ PCSTR pszCustomPropertyName,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Custom_PropertyW(
-  IN DEVINST dnDevInst,
-  IN PCWSTR pszCustomPropertyName,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ PCWSTR pszCustomPropertyName,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Custom_Property_ExA(
-  IN DEVINST dnDevInst,
-  IN PCSTR pszCustomPropertyName,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ PCSTR pszCustomPropertyName,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Custom_Property_ExW(
-  IN DEVINST dnDevInst,
-  IN PCWSTR pszCustomPropertyName,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ PCWSTR pszCustomPropertyName,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Get_DevInst_Custom_PropertyW     CM_Get_DevNode_Custom_PropertyW
 #define CM_Get_DevInst_Custom_PropertyA     CM_Get_DevNode_Custom_PropertyA
@@ -1792,20 +1793,20 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Status(
-  OUT PULONG pulStatus,
-  OUT PULONG pulProblemNumber,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulStatus,
+  _Out_ PULONG pulProblemNumber,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_DevNode_Status_Ex(
-  OUT PULONG pulStatus,
-  OUT PULONG pulProblemNumber,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulStatus,
+  _Out_ PULONG pulProblemNumber,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Get_DevInst_Status CM_Get_DevNode_Status
 #define CM_Get_DevInst_Status_Ex CM_Get_DevNode_Status_Ex
@@ -1814,67 +1815,67 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_First_Log_Conf(
-  OUT PLOG_CONF plcLogConf OPTIONAL,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _Out_opt_ PLOG_CONF plcLogConf,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_First_Log_Conf_Ex(
-  OUT PLOG_CONF plcLogConf OPTIONAL,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_opt_ PLOG_CONF plcLogConf,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Global_State(
-  OUT PULONG pulState,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulState,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Global_State_Ex(
-  OUT PULONG pulState,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulState,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Hardware_Profile_InfoA(
-  IN ULONG ulIndex,
-  OUT PHWPROFILEINFO_A pHWProfileInfo,
-  IN ULONG ulFlags);
+  _In_ ULONG ulIndex,
+  _Out_ PHWPROFILEINFO_A pHWProfileInfo,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Hardware_Profile_Info_ExA(
-  IN ULONG ulIndex,
-  OUT PHWPROFILEINFO_A pHWProfileInfo,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ ULONG ulIndex,
+  _Out_ PHWPROFILEINFO_A pHWProfileInfo,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Hardware_Profile_InfoW(
-  IN ULONG ulIndex,
-  OUT PHWPROFILEINFO_W pHWProfileInfo,
-  IN ULONG ulFlags);
+  _In_ ULONG ulIndex,
+  _Out_ PHWPROFILEINFO_W pHWProfileInfo,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Hardware_Profile_Info_ExW(
-  IN ULONG ulIndex,
-  OUT PHWPROFILEINFO_W pHWProfileInfo,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ ULONG ulIndex,
+  _Out_ PHWPROFILEINFO_W pHWProfileInfo,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Hardware_Profile_Info      CM_Get_Hardware_Profile_InfoW
@@ -1888,39 +1889,39 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_HW_Prof_FlagsA(
-  IN DEVINSTID_A szDevInstName,
-  IN ULONG ulHardwareProfile,
-  OUT PULONG pulValue,
-  IN ULONG ulFlags);
+  _In_ DEVINSTID_A szDevInstName,
+  _In_ ULONG ulHardwareProfile,
+  _Out_ PULONG pulValue,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_HW_Prof_FlagsW(
-  IN DEVINSTID_W szDevInstName,
-  IN ULONG ulHardwareProfile,
-  OUT PULONG pulValue,
-  IN ULONG ulFlags);
+  _In_ DEVINSTID_W szDevInstName,
+  _In_ ULONG ulHardwareProfile,
+  _Out_ PULONG pulValue,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_HW_Prof_Flags_ExA(
-  IN DEVINSTID_A szDevInstName,
-  IN ULONG ulHardwareProfile,
-  OUT PULONG pulValue,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINSTID_A szDevInstName,
+  _In_ ULONG ulHardwareProfile,
+  _Out_ PULONG pulValue,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_HW_Prof_Flags_ExW(
-  IN DEVINSTID_W szDevInstName,
-  IN ULONG ulHardwareProfile,
-  OUT PULONG pulValue,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINSTID_W szDevInstName,
+  _In_ ULONG ulHardwareProfile,
+  _Out_ PULONG pulValue,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_HW_Prof_Flags CM_Get_HW_Prof_FlagsW
@@ -1934,43 +1935,43 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_AliasA(
-  IN LPCSTR pszDeviceInterface,
-  IN LPGUID AliasInterfaceGuid,
-  OUT LPSTR pszAliasDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ LPGUID AliasInterfaceGuid,
+  _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_AliasW(
-  IN LPCWSTR pszDeviceInterface,
-  IN LPGUID AliasInterfaceGuid,
-  OUT LPWSTR pszAliasDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ LPGUID AliasInterfaceGuid,
+  _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_Alias_ExA(
-  IN LPCSTR pszDeviceInterface,
-  IN LPGUID AliasInterfaceGuid,
-  OUT LPSTR pszAliasDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ LPGUID AliasInterfaceGuid,
+  _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_Alias_ExW(
-  IN LPCWSTR pszDeviceInterface,
-  IN LPGUID AliasInterfaceGuid,
-  OUT LPWSTR pszAliasDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ LPGUID AliasInterfaceGuid,
+  _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Device_Interface_Alias     CM_Get_Device_Interface_AliasW
@@ -1984,43 +1985,43 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_ListA(
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_A pDeviceID OPTIONAL,
-  OUT PCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_A pDeviceID,
+  _Out_writes_(BufferLen) PCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_ListW(
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_W pDeviceID OPTIONAL,
-  OUT PWCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_W pDeviceID,
+  _Out_writes_(BufferLen) PWCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_List_ExA(
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_A pDeviceID OPTIONAL,
-  OUT PCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_A pDeviceID,
+  _Out_writes_(BufferLen) PCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_List_ExW(
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_W pDeviceID OPTIONAL,
-  OUT PWCHAR Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_W pDeviceID,
+  _Out_writes_(BufferLen) PWCHAR Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Device_Interface_List     CM_Get_Device_Interface_ListW
@@ -2034,39 +2035,39 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_List_SizeA(
-  OUT PULONG pulLen,
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_A pDeviceID OPTIONAL,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulLen,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_A pDeviceID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_List_SizeW(
-  OUT PULONG pulLen,
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_W pDeviceID OPTIONAL,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulLen,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_W pDeviceID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_List_Size_ExA(
-  OUT PULONG pulLen,
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_A pDeviceID OPTIONAL,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_ PULONG pulLen,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_A pDeviceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Device_Interface_List_Size_ExW(
-  OUT PULONG pulLen,
-  IN LPGUID InterfaceClassGuid,
-  IN DEVINSTID_W pDeviceID OPTIONAL,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_ PULONG pulLen,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ DEVINSTID_W pDeviceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Device_Interface_List_Size     CM_Get_Device_Interface_List_SizeW
@@ -2080,132 +2081,132 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Log_Conf_Priority(
-  IN LOG_CONF lcLogConf,
-  OUT PPRIORITY pPriority,
-  IN ULONG ulFlags);
+  _In_ LOG_CONF lcLogConf,
+  _Out_ PPRIORITY pPriority,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Log_Conf_Priority_Ex(
-  IN LOG_CONF lcLogConf,
-  OUT PPRIORITY pPriority,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ LOG_CONF lcLogConf,
+  _Out_ PPRIORITY pPriority,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Next_Log_Conf(
-  OUT PLOG_CONF plcLogConf OPTIONAL,
-  IN LOG_CONF lcLogConf,
-  IN ULONG ulFlags);
+  _Out_opt_ PLOG_CONF plcLogConf,
+  _In_ LOG_CONF lcLogConf,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Next_Log_Conf_Ex(
-  OUT PLOG_CONF plcLogConf OPTIONAL,
-  IN LOG_CONF lcLogConf,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_opt_ PLOG_CONF plcLogConf,
+  _In_ LOG_CONF lcLogConf,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Next_Res_Des(
-  OUT PRES_DES prdResDes,
-  IN RES_DES rdResDes,
-  IN RESOURCEID ForResource,
-  OUT PRESOURCEID pResourceID,
-  IN ULONG ulFlags);
+  _Out_ PRES_DES prdResDes,
+  _In_ RES_DES rdResDes,
+  _In_ RESOURCEID ForResource,
+  _Out_opt_ PRESOURCEID pResourceID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Next_Res_Des_Ex(
-  OUT PRES_DES prdResDes,
-  IN RES_DES rdResDes,
-  IN RESOURCEID ForResource,
-  OUT PRESOURCEID pResourceID,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PRES_DES prdResDes,
+  _In_ RES_DES rdResDes,
+  _In_ RESOURCEID ForResource,
+  _Out_opt_ PRESOURCEID pResourceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Parent(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Parent_Ex(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Res_Des_Data(
-  IN RES_DES rdResDes,
-  OUT PVOID Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags);
+  _In_ RES_DES rdResDes,
+  _Out_writes_bytes_(BufferLen) PVOID Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Res_Des_Data_Ex(
-  IN RES_DES rdResDes,
-  OUT PVOID Buffer,
-  IN ULONG BufferLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ RES_DES rdResDes,
+  _Out_writes_bytes_(BufferLen) PVOID Buffer,
+  _In_ ULONG BufferLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Res_Des_Data_Size(
-  OUT PULONG pulSize,
-  IN RES_DES rdResDes,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulSize,
+  _In_ RES_DES rdResDes,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Res_Des_Data_Size_Ex(
-  OUT PULONG pulSize,
-  IN RES_DES rdResDes,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PULONG pulSize,
+  _In_ RES_DES rdResDes,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Resource_Conflict_Count(
-  IN CONFLICT_LIST clConflictList,
-  OUT PULONG pulCount);
+  _In_ CONFLICT_LIST clConflictList,
+  _Out_ PULONG pulCount);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Resource_Conflict_DetailsA(
-  IN CONFLICT_LIST clConflictList,
-  IN ULONG ulIndex,
-  IN OUT PCONFLICT_DETAILS_A pConflictDetails);
+  _In_ CONFLICT_LIST clConflictList,
+  _In_ ULONG ulIndex,
+  _Inout_ PCONFLICT_DETAILS_A pConflictDetails);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Resource_Conflict_DetailsW(
-  IN CONFLICT_LIST clConflictList,
-  IN ULONG ulIndex,
-  IN OUT PCONFLICT_DETAILS_W pConflictDetails);
+  _In_ CONFLICT_LIST clConflictList,
+  _In_ ULONG ulIndex,
+  _Inout_ PCONFLICT_DETAILS_W pConflictDetails);
 
 #ifdef UNICODE
 #define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsW
@@ -2217,47 +2218,47 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Registry_PropertyW(
-  IN LPGUID ClassGuid,
-  IN ULONG ulProperty,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPGUID ClassGuid,
+  _In_ ULONG ulProperty,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_Class_Registry_PropertyW(
-  IN LPGUID ClassGuid,
-  IN ULONG ulProperty,
-  IN PCVOID Buffer OPTIONAL,
-  IN ULONG ulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPGUID ClassGuid,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Class_Registry_PropertyA(
-  IN LPGUID ClassGuid,
-  IN ULONG ulProperty,
-  OUT PULONG pulRegDataType OPTIONAL,
-  OUT PVOID Buffer OPTIONAL,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPGUID ClassGuid,
+  _In_ ULONG ulProperty,
+  _Out_opt_ PULONG pulRegDataType,
+  _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_Class_Registry_PropertyA(
-  IN LPGUID ClassGuid,
-  IN ULONG ulProperty,
-  IN PCVOID Buffer OPTIONAL,
-  IN  ULONG ulLength,
-  IN  ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPGUID ClassGuid,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Get_Class_Registry_Property CM_Get_Class_Registry_PropertyW
@@ -2271,18 +2272,18 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Sibling(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINST DevInst,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINST DevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Get_Sibling_Ex(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINST DevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_ DEVINST DevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 WORD
@@ -2293,7 +2294,7 @@ CMAPI
 WORD
 WINAPI
 CM_Get_Version_Ex(
-  IN HMACHINE hMachine);
+  _In_opt_ HMACHINE hMachine);
 
 #if (WINVER >= _WIN32_WINNT_WINXP)
 
@@ -2301,14 +2302,14 @@ CMAPI
 BOOL
 WINAPI
 CM_Is_Version_Available(
-  IN WORD wVersion);
+  _In_ WORD wVersion);
 
 CMAPI
 BOOL
 WINAPI
 CM_Is_Version_Available_Ex(
-  IN WORD wVersion,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ WORD wVersion,
+  _In_opt_ HMACHINE hMachine);
 
 #endif /* (WINVER >= _WIN32_WINNT_WINXP) */
 
@@ -2316,66 +2317,66 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Intersect_Range_List(
-  IN RANGE_LIST rlhOld1,
-  IN RANGE_LIST rlhOld2,
-  IN RANGE_LIST rlhNew,
-  IN ULONG ulFlags);
+  _In_ RANGE_LIST rlhOld1,
+  _In_ RANGE_LIST rlhOld2,
+  _In_ RANGE_LIST rlhNew,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Invert_Range_List(
-  IN RANGE_LIST rlhOld,
-  IN RANGE_LIST rlhNew,
-  IN DWORDLONG ullMaxValue,
-  IN ULONG ulFlags);
+  _In_ RANGE_LIST rlhOld,
+  _In_ RANGE_LIST rlhNew,
+  _In_ DWORDLONG ullMaxValue,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Is_Dock_Station_Present(
-  OUT PBOOL pbPresent);
+  _Out_ PBOOL pbPresent);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Is_Dock_Station_Present_Ex(
-  OUT PBOOL pbPresent,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_ PBOOL pbPresent,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Locate_DevNodeA(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_A pDeviceID OPTIONAL,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_opt_ DEVINSTID_A pDeviceID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Locate_DevNode_ExA(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_A pDeviceID OPTIONAL,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_opt_ DEVINSTID_A pDeviceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Locate_DevNode_ExW(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_W pDeviceID OPTIONAL,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PDEVINST pdnDevInst,
+  _In_opt_ DEVINSTID_W pDeviceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Locate_DevNodeW(
-  OUT PDEVINST pdnDevInst,
-  IN DEVINSTID_W pDeviceID OPTIONAL,
-  IN ULONG ulFlags);
+  _Out_ PDEVINST pdnDevInst,
+  _In_opt_ DEVINSTID_W pDeviceID,
+  _In_ ULONG ulFlags);
 
 #define CM_Locate_DevInstA CM_Locate_DevNodeA
 #define CM_Locate_DevInstW CM_Locate_DevNodeW
@@ -2398,50 +2399,50 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Merge_Range_List(
-  IN RANGE_LIST rlhOld1,
-  IN RANGE_LIST rlhOld2,
-  IN RANGE_LIST rlhNew,
-  IN ULONG ulFlags);
+  _In_ RANGE_LIST rlhOld1,
+  _In_ RANGE_LIST rlhOld2,
+  _In_ RANGE_LIST rlhNew,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Modify_Res_Des(
-  OUT PRES_DES prdResDes,
-  IN RES_DES rdResDes,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  IN ULONG ulFlags);
+  _Out_ PRES_DES prdResDes,
+  _In_ RES_DES rdResDes,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Modify_Res_Des_Ex(
-  OUT PRES_DES prdResDes,
-  IN RES_DES rdResDes,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _Out_ PRES_DES prdResDes,
+  _In_ RES_DES rdResDes,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Move_DevNode(
-  IN DEVINST dnFromDevInst,
-  IN DEVINST dnToDevInst,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnFromDevInst,
+  _In_ DEVINST dnToDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Move_DevNode_Ex(
-  IN DEVINST dnFromDevInst,
-  IN DEVINST dnToDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnFromDevInst,
+  _In_ DEVINST dnToDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Move_DevInst                CM_Move_DevNode
 #define CM_Move_DevInst_Ex             CM_Move_DevNode_Ex
@@ -2450,56 +2451,56 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Next_Range(
-  IN OUT PRANGE_ELEMENT preElement,
-  OUT PDWORDLONG pullStart,
-  OUT PDWORDLONG pullEnd,
-  IN ULONG ulFlags);
+  _Inout_ PRANGE_ELEMENT preElement,
+  _Out_ PDWORDLONG pullStart,
+  _Out_ PDWORDLONG pullEnd,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Class_KeyA(
-  IN LPGUID ClassGuid OPTIONAL,
-  IN LPCSTR pszClassName OPTIONAL,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkClass,
-  IN ULONG ulFlags);
+  _In_opt_ LPGUID ClassGuid,
+  _In_opt_ LPCSTR pszClassName,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkClass,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Class_KeyW(
-  IN LPGUID ClassGuid OPTIONAL,
-  IN LPCWSTR pszClassName OPTIONAL,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkClass,
-  IN ULONG ulFlags);
+  _In_opt_ LPGUID ClassGuid,
+  _In_opt_ LPCWSTR pszClassName,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkClass,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Class_Key_ExA(
-  IN LPGUID pszClassGuid OPTIONAL,
-  IN LPCSTR pszClassName OPTIONAL,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkClass,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_opt_ LPGUID pszClassGuid,
+  _In_opt_ LPCSTR pszClassName,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkClass,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Class_Key_ExW(
-  IN LPGUID pszClassGuid OPTIONAL,
-  IN LPCWSTR pszClassName OPTIONAL,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkClass,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_opt_ LPGUID pszClassGuid,
+  _In_opt_ LPCWSTR pszClassName,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkClass,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Open_Class_Key CM_Open_Class_KeyW
@@ -2513,24 +2514,24 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Open_DevNode_Key(
-  IN DEVINST dnDevNode,
-  IN REGSAM samDesired,
-  IN ULONG ulHardwareProfile,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkDevice,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevNode,
+  _In_ REGSAM samDesired,
+  _In_ ULONG ulHardwareProfile,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkDevice,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_DevNode_Key_Ex(
-  IN DEVINST dnDevNode,
-  IN REGSAM samDesired,
-  IN ULONG ulHardwareProfile,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkDevice,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevNode,
+  _In_ REGSAM samDesired,
+  _In_ ULONG ulHardwareProfile,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkDevice,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Open_DevInst_Key CM_Open_DevNode_Key
 #define CM_Open_DevInst_Key_Ex CM_Open_DevNode_Key_Ex
@@ -2541,43 +2542,43 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Device_Interface_KeyA(
-  IN LPCSTR pszDeviceInterface,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkDeviceInterface,
-  IN ULONG ulFlags);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkDeviceInterface,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Device_Interface_KeyW(
-  IN LPCWSTR pszDeviceInterface,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkDeviceInterface,
-  IN ULONG ulFlags);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkDeviceInterface,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Device_Interface_Key_ExA(
-  IN LPCSTR pszDeviceInterface,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkDeviceInterface,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkDeviceInterface,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Open_Device_Interface_Key_ExW(
-  IN LPCWSTR pszDeviceInterface,
-  IN REGSAM samDesired,
-  IN REGDISPOSITION Disposition,
-  OUT PHKEY phkDeviceInterface,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ REGSAM samDesired,
+  _In_ REGDISPOSITION Disposition,
+  _Out_ PHKEY phkDeviceInterface,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Open_Device_Interface_Key    CM_Open_Device_Interface_KeyW
@@ -2591,31 +2592,31 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Device_Interface_KeyA(
-  IN LPCSTR pszDeviceInterface,
-  IN ULONG ulFlags);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Device_Interface_KeyW(
-  IN LPCWSTR pszDeviceInterface,
-  IN ULONG ulFlags);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Device_Interface_Key_ExA(
-  IN LPCSTR pszDeviceInterface,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Delete_Device_Interface_Key_ExW(
-  IN LPCWSTR pszDeviceInterface,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Delete_Device_Interface_Key    CM_Delete_Device_Interface_KeyW
@@ -2631,98 +2632,98 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Arbitrator_Free_Data(
-  OUT PVOID pData,
-  IN ULONG DataLen,
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN ULONG ulFlags);
+  _Out_writes_bytes_(DataLen) PVOID pData,
+  _In_ ULONG DataLen,
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Arbitrator_Free_Data_Ex(
-  OUT PVOID pData,
-  IN ULONG DataLen,
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_writes_bytes_(DataLen) PVOID pData,
+  _In_ ULONG DataLen,
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Arbitrator_Free_Size(
-  OUT PULONG pulSize,
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN ULONG ulFlags);
+  _Out_ PULONG pulSize,
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Arbitrator_Free_Size_Ex(
-  OUT PULONG pulSize,
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_ PULONG pulSize,
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Remove_SubTree(
-  IN DEVINST dnAncestor,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnAncestor,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Remove_SubTree_Ex(
-  IN DEVINST dnAncestor,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnAncestor,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_And_Remove_SubTreeA(
-  IN DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnAncestor,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_And_Remove_SubTreeW(
-  IN DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPWSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnAncestor,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_And_Remove_SubTree_ExA(
-  IN DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnAncestor,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Query_And_Remove_SubTree_ExW(
-  IN DEVINST dnAncestor,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPWSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnAncestor,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Query_And_Remove_SubTree     CM_Query_And_Remove_SubTreeW
@@ -2736,28 +2737,28 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Query_Resource_Conflict_List(
-  OUT PCONFLICT_LIST pclConflictList,
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN PCVOID ResourceData,
-  IN ULONG ResourceLen,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _Out_ PCONFLICT_LIST pclConflictList,
+  _In_ DEVINST dnDevInst,
+  _In_ RESOURCEID ResourceID,
+  _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+  _In_ ULONG ResourceLen,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Reenumerate_DevNode(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Reenumerate_DevNode_Ex(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Reenumerate_DevInst CM_Reenumerate_DevNode
 #define CM_Reenumerate_DevInst_Ex CM_Reenumerate_DevNode_Ex
@@ -2766,47 +2767,47 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Register_Device_InterfaceA(
-  IN DEVINST dnDevInst,
-  IN LPGUID InterfaceClassGuid,
-  IN LPCSTR pszReference OPTIONAL,
-  OUT LPSTR pszDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ LPCSTR pszReference,
+  _Out_writes_(*pulLength) LPSTR pszDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Register_Device_InterfaceW(
-  IN DEVINST dnDevInst,
-  IN LPGUID InterfaceClassGuid,
-  IN LPCWSTR pszReference OPTIONAL,
-  OUT LPWSTR pszDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ LPCWSTR pszReference,
+  _Out_writes_(*pulLength) LPWSTR pszDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Register_Device_Interface_ExA(
-  IN DEVINST dnDevInst,
-  IN LPGUID InterfaceClassGuid,
-  IN LPCSTR pszReference OPTIONAL,
-  OUT LPSTR pszDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ LPCSTR pszReference,
+  _Out_writes_(*pulLength) LPSTR pszDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Register_Device_Interface_ExW(
-  IN DEVINST dnDevInst,
-  IN LPGUID InterfaceClassGuid,
-  IN LPCWSTR pszReference OPTIONAL,
-  OUT LPWSTR pszDeviceInterface,
-  IN OUT PULONG pulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ LPGUID InterfaceClassGuid,
+  _In_opt_ LPCWSTR pszReference,
+  _Out_writes_(*pulLength) LPWSTR pszDeviceInterface,
+  _Inout_ PULONG pulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Register_Device_Interface    CM_Register_Device_InterfaceW
@@ -2820,43 +2821,43 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Request_Device_EjectA(
-  IN DEVINST dnDevInst,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Request_Device_Eject_ExW(
-  IN DEVINST dnDevInst,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPWSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Request_Device_Eject_ExA(
-  IN DEVINST dnDevInst,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Request_Device_EjectW(
-  IN DEVINST dnDevInst,
-  OUT PPNP_VETO_TYPE pVetoType,
-  OUT LPWSTR pszVetoName,
-  IN ULONG ulNameLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _Out_opt_ PPNP_VETO_TYPE pVetoType,
+  _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+  _In_ ULONG ulNameLength,
+  _In_ ULONG ulFlags);
 
 #ifdef UNICODE
 #define CM_Request_Device_Eject CM_Request_Device_EjectW
@@ -2875,20 +2876,20 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Request_Eject_PC_Ex(
-  IN HMACHINE hMachine OPTIONAL);
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Run_Detection(
-  IN ULONG ulFlags);
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Run_Detection_Ex(
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #if (WINVER >= _WIN32_WINNT_VISTA)
 
@@ -2897,45 +2898,45 @@ CM_Apply_PowerScheme(VOID);
 
 CONFIGRET
 CM_Write_UserPowerKey(
-  IN CONST GUID *SchemeGuid OPTIONAL,
-  IN CONST GUID *SubGroupOfPowerSettingsGuid OPTIONAL,
-  IN CONST GUID *PowerSettingGuid OPTIONAL,
-  IN ULONG AccessFlags,
-  IN ULONG Type,
-  IN UCHAR *Buffer,
-  IN DWORD BufferSize,
-  OUT PDWORD Error);
+  _In_opt_ CONST GUID *SchemeGuid,
+  _In_opt_ CONST GUID *SubGroupOfPowerSettingsGuid,
+  _In_opt_ CONST GUID *PowerSettingGuid,
+  _In_ ULONG AccessFlags,
+  _In_ ULONG Type,
+  _In_reads_bytes_(BufferSize) UCHAR *Buffer,
+  _In_ DWORD BufferSize,
+  _Out_ PDWORD Error);
 
 CONFIGRET
 CM_Set_ActiveScheme(
-  IN CONST GUID *SchemeGuid,
-  OUT PDWORD Error);
+  _In_ CONST GUID *SchemeGuid,
+  _Out_ PDWORD Error);
 
 CONFIGRET
 CM_Restore_DefaultPowerScheme(
-  IN CONST GUID *SchemeGuid,
-  OUT PDWORD Error);
+  _In_ CONST GUID *SchemeGuid,
+  _Out_ PDWORD Error);
 
 CONFIGRET
 CM_RestoreAll_DefaultPowerSchemes(
-  OUT PDWORD Error);
+  _Out_ PDWORD Error);
 
 CONFIGRET
 CM_Duplicate_PowerScheme(
-  IN CONST GUID *SourceSchemeGuid,
-  IN GUID **DestinationSchemeGuid,
-  OUT PDWORD Error);
+  _In_ CONST GUID *SourceSchemeGuid,
+  _Inout_ GUID **DestinationSchemeGuid,
+  _Out_ PDWORD Error);
 
 CONFIGRET
 CM_Delete_PowerScheme(
-  IN CONST GUID *SchemeGuid,
-  OUT PDWORD Error);
+  _In_ CONST GUID *SchemeGuid,
+  _Out_ PDWORD Error);
 
 CONFIGRET
 CM_Import_PowerScheme(
-  IN LPCWSTR ImportFileNamePath,
-  IN OUT GUID **DestinationSchemeGuid,
-  OUT PDWORD Error);
+  _In_ LPCWSTR ImportFileNamePath,
+  _Inout_ GUID **DestinationSchemeGuid,
+  _Out_ PDWORD Error);
 
 #endif /* (WINVER >= _WIN32_WINNT_VISTA) */
 
@@ -2943,18 +2944,18 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Set_DevNode_Problem(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProblem,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProblem,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_DevNode_Problem_Ex(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProblem,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProblem,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Set_DevInst_Problem CM_Set_DevNode_Problem
 #define CM_Set_DevInst_Problem_Ex CM_Set_DevNode_Problem_Ex
@@ -2963,31 +2964,31 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Unregister_Device_InterfaceA(
-  IN LPCSTR pszDeviceInterface,
-  IN ULONG ulFlags);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Unregister_Device_InterfaceW(
-  IN LPCWSTR pszDeviceInterface,
-  IN ULONG ulFlags);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Unregister_Device_Interface_ExA(
-  IN LPCSTR pszDeviceInterface,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCSTR pszDeviceInterface,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Unregister_Device_Interface_ExW(
-  IN LPCWSTR pszDeviceInterface,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ LPCWSTR pszDeviceInterface,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Unregister_Device_Interface    CM_Unregister_Device_InterfaceW
@@ -3001,73 +3002,73 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Register_Device_Driver(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Register_Device_Driver_Ex(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Remove_SubTree(
-  IN DEVINST dnAncestor,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnAncestor,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Remove_SubTree_Ex(
-  IN DEVINST dnAncestor,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnAncestor,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_DevNode_Registry_PropertyA(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  IN PCVOID Buffer OPTIONAL,
-  IN ULONG ulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_DevNode_Registry_PropertyW(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  IN PCVOID Buffer OPTIONAL,
-  IN ULONG ulLength,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_DevNode_Registry_Property_ExA(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  IN PCVOID Buffer OPTIONAL,
-  IN ULONG ulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_DevNode_Registry_Property_ExW(
-  IN DEVINST dnDevInst,
-  IN ULONG ulProperty,
-  IN PCVOID Buffer OPTIONAL,
-  IN ULONG ulLength,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Set_DevInst_Registry_PropertyW CM_Set_DevNode_Registry_PropertyW
 #define CM_Set_DevInst_Registry_PropertyA CM_Set_DevNode_Registry_PropertyA
@@ -3090,54 +3091,54 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Set_HW_Prof(
-  IN ULONG ulHardwareProfile,
-  IN ULONG ulFlags);
+  _In_ ULONG ulHardwareProfile,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_HW_Prof_Ex(
-  IN ULONG ulHardwareProfile,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ ULONG ulHardwareProfile,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_HW_Prof_FlagsA(
-  IN DEVINSTID_A szDevInstName,
-  IN ULONG ulConfig,
-  IN ULONG ulValue,
-  IN ULONG ulFlags);
+  _In_ DEVINSTID_A szDevInstName,
+  _In_ ULONG ulConfig,
+  _In_ ULONG ulValue,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_HW_Prof_FlagsW(
-  IN DEVINSTID_W szDevInstName,
-  IN ULONG ulConfig,
-  IN ULONG ulValue,
-  IN ULONG ulFlags);
+  _In_ DEVINSTID_W szDevInstName,
+  _In_ ULONG ulConfig,
+  _In_ ULONG ulValue,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_HW_Prof_Flags_ExA(
-  IN DEVINSTID_A szDevInstName,
-  IN ULONG ulConfig,
-  IN ULONG ulValue,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINSTID_A szDevInstName,
+  _In_ ULONG ulConfig,
+  _In_ ULONG ulValue,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Set_HW_Prof_Flags_ExW(
-  IN DEVINSTID_W szDevInstName,
-  IN ULONG ulConfig,
-  IN ULONG ulValue,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINSTID_W szDevInstName,
+  _In_ ULONG ulConfig,
+  _In_ ULONG ulValue,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #ifdef UNICODE
 #define CM_Set_HW_Prof_Flags CM_Set_HW_Prof_FlagsW
@@ -3151,16 +3152,16 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Setup_DevNode(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Setup_DevNode_Ex(
-  IN DEVINST dnDevInst,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine OPTIONAL);
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Setup_DevInst         CM_Setup_DevNode
 #define CM_Setup_DevInst_Ex      CM_Setup_DevNode_Ex
@@ -3169,25 +3170,25 @@ CMAPI
 CONFIGRET
 WINAPI
 CM_Test_Range_Available(
-  IN DWORDLONG ullStartValue,
-  IN DWORDLONG ullEndValue,
-  IN RANGE_LIST rlh,
-  IN ULONG ulFlags);
+  _In_ DWORDLONG ullStartValue,
+  _In_ DWORDLONG ullEndValue,
+  _In_ RANGE_LIST rlh,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Uninstall_DevNode(
-  IN DEVINST dnPhantom,
-  IN ULONG ulFlags);
+  _In_ DEVINST dnPhantom,
+  _In_ ULONG ulFlags);
 
 CMAPI
 CONFIGRET
 WINAPI
 CM_Uninstall_DevNode_Ex(
-  IN DEVINST dnPhantom,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine);
+  _In_ DEVINST dnPhantom,
+  _In_ ULONG ulFlags,
+  _In_opt_ HMACHINE hMachine);
 
 #define CM_Uninstall_DevInst     CM_Uninstall_DevNode
 #define CM_Uninstall_DevInst_Ex  CM_Uninstall_DevNode_Ex
@@ -3201,10 +3202,12 @@ CMAPI
 DWORD
 WINAPI
 CMP_WaitNoPendingInstallEvents(
-  IN DWORD dwTimeout);
+  _In_ DWORD dwTimeout);
 
 #endif /* (WINVER >= _WIN32_WINNT_WIN2K) */
 
 #ifdef __cplusplus
 }
 #endif
+
+#endif /* _CFGMGR32_H_ */
index 7ac0ef1..840c15a 100644 (file)
@@ -3,6 +3,7 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
+
 #ifndef _INC_COMMCTRL
 #define _INC_COMMCTRL
 
@@ -21,7 +22,7 @@
 
 #ifndef _HRESULT_DEFINED
 #define _HRESULT_DEFINED
-typedef LONG HRESULT;
+typedef _Return_type_success_(return >= 0) LONG HRESULT;
 #endif
 
 #ifndef NOUSER
@@ -70,7 +71,8 @@ extern "C" {
 #define ICC_NATIVEFNTCTL_CLASS 0x2000
 #define ICC_STANDARD_CLASSES 0x4000
 #define ICC_LINK_CLASS 0x8000
-  WINCOMMCTRLAPI WINBOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *);
+
+  WINCOMMCTRLAPI WINBOOL WINAPI InitCommonControlsEx(_In_ const INITCOMMONCONTROLSEX *);
 
 #define ODT_HEADER 100
 #define ODT_TAB 101
@@ -330,15 +332,57 @@ extern "C" {
 #define ILC_PERITEMMIRROR 0x8000
 
   WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Create(int cx,int cy,UINT flags,int cInitial,int cGrow);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Destroy(HIMAGELIST himl);
-  WINCOMMCTRLAPI int WINAPI ImageList_GetImageCount(HIMAGELIST himl);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_SetImageCount(HIMAGELIST himl,UINT uNewCount);
-  WINCOMMCTRLAPI int WINAPI ImageList_Add(HIMAGELIST himl,HBITMAP hbmImage,HBITMAP hbmMask);
-  WINCOMMCTRLAPI int WINAPI ImageList_ReplaceIcon(HIMAGELIST himl,int i,HICON hicon);
-  WINCOMMCTRLAPI COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST himl,COLORREF clrBk);
-  WINCOMMCTRLAPI COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST himl);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST himl,int iImage,int iOverlay);
-  WINCOMMCTRLAPI HRESULT WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **);
+  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Destroy(_In_opt_ HIMAGELIST himl);
+  WINCOMMCTRLAPI int WINAPI ImageList_GetImageCount(_In_ HIMAGELIST himl);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_SetImageCount(
+    _In_ HIMAGELIST himl,
+    _In_ UINT uNewCount);
+
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  ImageList_Add(
+    _In_ HIMAGELIST himl,
+    _In_ HBITMAP hbmImage,
+    _In_opt_ HBITMAP hbmMask);
+
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  ImageList_ReplaceIcon(
+    _In_ HIMAGELIST himl,
+    _In_ int i,
+    _In_ HICON hicon);
+
+  WINCOMMCTRLAPI
+  COLORREF
+  WINAPI
+  ImageList_SetBkColor(
+    _In_ HIMAGELIST himl,
+    _In_ COLORREF clrBk);
+
+  WINCOMMCTRLAPI COLORREF WINAPI ImageList_GetBkColor(_In_ HIMAGELIST himl);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_SetOverlayImage(
+    _In_ HIMAGELIST himl,
+    _In_ int iImage,
+    _In_ int iOverlay);
+
+  WINCOMMCTRLAPI
+  HRESULT
+  WINAPI
+  HIMAGELIST_QueryInterface(
+    _In_ HIMAGELIST,
+    _In_ REFIID,
+    _Outptr_ void **);
+
 #define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon)
 
 #define ILD_NORMAL 0x0
@@ -365,13 +409,70 @@ extern "C" {
 #define ILS_SATURATE 0x4
 #define ILS_ALPHA 0x8
 
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Draw(HIMAGELIST himl,int i,HDC hdcDst,int x,int y,UINT fStyle);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Replace(HIMAGELIST himl,int i,HBITMAP hbmImage,HBITMAP hbmMask);
-  WINCOMMCTRLAPI int WINAPI ImageList_AddMasked(HIMAGELIST himl,HBITMAP hbmImage,COLORREF crMask);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_DrawEx(HIMAGELIST himl,int i,HDC hdcDst,int x,int y,int dx,int dy,COLORREF rgbBk,COLORREF rgbFg,UINT fStyle);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS *pimldp);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Remove(HIMAGELIST himl,int i);
-  WINCOMMCTRLAPI HICON WINAPI ImageList_GetIcon(HIMAGELIST himl,int i,UINT flags);
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_Draw(
+    _In_ HIMAGELIST himl,
+    _In_ int i,
+    _In_ HDC hdcDst,
+    _In_ int x,
+    _In_ int y,
+    _In_ UINT fStyle);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_Replace(
+    _In_ HIMAGELIST himl,
+    _In_ int i,
+    _In_ HBITMAP hbmImage,
+    _In_opt_ HBITMAP hbmMask);
+
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  ImageList_AddMasked(
+    _In_ HIMAGELIST himl,
+    _In_ HBITMAP hbmImage,
+    _In_ COLORREF crMask);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_DrawEx(
+    _In_ HIMAGELIST himl,
+    _In_ int i,
+    _In_ HDC hdcDst,
+    _In_ int x,
+    _In_ int y,
+    _In_ int dx,
+    _In_ int dy,
+    _In_ COLORREF rgbBk,
+    _In_ COLORREF rgbFg,
+    _In_ UINT fStyle);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_DrawIndirect(
+    _In_ IMAGELISTDRAWPARAMS *pimldp);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_Remove(
+    _In_ HIMAGELIST himl,
+    _In_ int i);
+
+  WINCOMMCTRLAPI
+  HICON
+  WINAPI
+  ImageList_GetIcon(
+    _In_ HIMAGELIST himl,
+    _In_ int i,
+    _In_ UINT flags);
+
   WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE hi,LPCSTR lpbmp,int cx,int cGrow,COLORREF crMask,UINT uType,UINT uFlags);
   WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE hi,LPCWSTR lpbmp,int cx,int cGrow,COLORREF crMask,UINT uType,UINT uFlags);
 
@@ -379,26 +480,61 @@ extern "C" {
 
 #define ILCF_MOVE 0x0
 #define ILCF_SWAP 0x1
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Copy(HIMAGELIST himlDst,int iDst,HIMAGELIST himlSrc,int iSrc,UINT uFlags);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack,int iTrack,int dxHotspot,int dyHotspot);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_Copy(
+    _In_ HIMAGELIST himlDst,
+    _In_ int iDst,
+    _In_ HIMAGELIST himlSrc,
+    _In_ int iSrc,
+    _In_ UINT uFlags);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_BeginDrag(
+    _In_ HIMAGELIST himlTrack,
+    _In_ int iTrack,
+    _In_ int dxHotspot,
+    _In_ int dyHotspot);
+
   WINCOMMCTRLAPI void WINAPI ImageList_EndDrag(void);
   WINCOMMCTRLAPI WINBOOL WINAPI ImageList_DragEnter(HWND hwndLock,int x,int y);
   WINCOMMCTRLAPI WINBOOL WINAPI ImageList_DragLeave(HWND hwndLock);
   WINCOMMCTRLAPI WINBOOL WINAPI ImageList_DragMove(int x,int y);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_SetDragCursorImage(HIMAGELIST himlDrag,int iDrag,int dxHotspot,int dyHotspot);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_SetDragCursorImage(
+    _In_ HIMAGELIST himlDrag,
+    _In_ int iDrag,
+    _In_ int dxHotspot,
+    _In_ int dyHotspot);
+
   WINCOMMCTRLAPI WINBOOL WINAPI ImageList_DragShowNolock(WINBOOL fShow);
-  WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_GetDragImage(POINT *ppt,POINT *pptHotspot);
+
+  _Success_(return != NULL)
+  WINCOMMCTRLAPI
+  HIMAGELIST
+  WINAPI
+  ImageList_GetDragImage(
+    _Out_opt_ POINT *ppt,
+    _Out_opt_ POINT *pptHotspot);
+
 #define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
 #define ImageList_ExtractIcon(hi,himl,i) ImageList_GetIcon(himl,i,0)
 #define ImageList_LoadBitmap(hi,lpbmp,cx,cGrow,crMask) ImageList_LoadImage(hi,lpbmp,cx,cGrow,crMask,IMAGE_BITMAP,0)
 
 #ifdef __IStream_INTERFACE_DEFINED__
-  WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Read(LPSTREAM pstm);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Write(HIMAGELIST himl,LPSTREAM pstm);
+  WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Read(_In_ LPSTREAM pstm);
+  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_Write(_In_ HIMAGELIST himl, _In_ LPSTREAM pstm);
 #define ILP_NORMAL 0
 #define ILP_DOWNLEVEL 1
-  WINCOMMCTRLAPI HRESULT WINAPI ImageList_ReadEx(DWORD dwFlags,LPSTREAM pstm,REFIID riid,PVOID *ppv);
-  WINCOMMCTRLAPI HRESULT WINAPI ImageList_WriteEx(HIMAGELIST himl,DWORD dwFlags,LPSTREAM pstm);
+  WINCOMMCTRLAPI HRESULT WINAPI ImageList_ReadEx(_In_ DWORD dwFlags, _In_ LPSTREAM pstm, _In_ REFIID riid, _Outptr_ PVOID *ppv);
+  WINCOMMCTRLAPI HRESULT WINAPI ImageList_WriteEx(_In_ HIMAGELIST himl, _In_ DWORD dwFlags, _In_ LPSTREAM pstm);
 #endif
 
 #ifndef IMAGEINFO
@@ -411,11 +547,46 @@ extern "C" {
   } IMAGEINFO,*LPIMAGEINFO;
 #endif
 
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl,int *cx,int *cy);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_SetIconSize(HIMAGELIST himl,int cx,int cy);
-  WINCOMMCTRLAPI WINBOOL WINAPI ImageList_GetImageInfo(HIMAGELIST himl,int i,IMAGEINFO *pImageInfo);
-  WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST himl1,int i1,HIMAGELIST himl2,int i2,int dx,int dy);
-  WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST himl);
+  _Success_(return != 0)
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_GetIconSize(
+    _In_ HIMAGELIST himl,
+    _Out_opt_ int *cx,
+    _Out_opt_ int *cy);
+
+  _Success_(return != 0)
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_SetIconSize(
+    _In_ HIMAGELIST himl,
+    _In_ int cx,
+    _In_ int cy);
+
+  _Success_(return != 0)
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ImageList_GetImageInfo(
+    _In_ HIMAGELIST himl,
+    _In_ int i,
+    _Out_ IMAGEINFO *pImageInfo);
+
+  WINCOMMCTRLAPI
+  HIMAGELIST
+  WINAPI
+  ImageList_Merge(
+    _In_ HIMAGELIST himl1,
+    _In_ int i1,
+    _In_ HIMAGELIST himl2,
+    _In_ int i2,
+    _In_ int dx,
+    _In_ int dy);
+
+  WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Duplicate(_In_ HIMAGELIST himl);
+
 #endif
 
 #ifndef NOHEADER
@@ -1760,8 +1931,22 @@ extern "C" {
 #ifndef NOMENUHELP
 
   WINCOMMCTRLAPI void WINAPI MenuHelp(UINT uMsg,WPARAM wParam,LPARAM lParam,HMENU hMainMenu,HINSTANCE hInst,HWND hwndStatus,UINT *lpwIDs);
-  WINCOMMCTRLAPI WINBOOL WINAPI ShowHideMenuCtl(HWND hWnd,UINT_PTR uFlags,LPINT lpInfo);
-  WINCOMMCTRLAPI void WINAPI GetEffectiveClientRect(HWND hWnd,LPRECT lprc,const INT *lpInfo);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  ShowHideMenuCtl(
+    _In_ HWND hWnd,
+    _In_ UINT_PTR uFlags,
+    _In_z_ LPINT lpInfo);
+
+  WINCOMMCTRLAPI
+  void
+  WINAPI
+  GetEffectiveClientRect(
+    _In_ HWND hWnd,
+    _Out_ LPRECT lprc,
+    _In_z_ const INT *lpInfo);
 
 #define MINSYSCOMMAND SC_SIZE
 #endif
@@ -4519,33 +4704,79 @@ typedef struct {
   typedef int (CALLBACK *PFNDSAENUMCALLBACK)(void *p,void *pData);
 
   WINCOMMCTRLAPI HDSA WINAPI DSA_Create(int cbItem,int cItemGrow);
-  WINCOMMCTRLAPI WINBOOL WINAPI DSA_Destroy(HDSA hdsa);
-  WINCOMMCTRLAPI void WINAPI DSA_DestroyCallback(HDSA hdsa,PFNDSAENUMCALLBACK pfnCB,void *pData);
-  WINCOMMCTRLAPI PVOID WINAPI DSA_GetItemPtr(HDSA hdsa,int i);
-  WINCOMMCTRLAPI int WINAPI DSA_InsertItem(HDSA hdsa,int i,void *pitem);
+  WINCOMMCTRLAPI WINBOOL WINAPI DSA_Destroy(_Inout_opt_ HDSA hdsa);
+
+  WINCOMMCTRLAPI
+  void
+  WINAPI
+  DSA_DestroyCallback(
+    _Inout_opt_ HDSA hdsa,
+    _In_ PFNDSAENUMCALLBACK pfnCB,
+    _In_opt_ void *pData);
+
+  WINCOMMCTRLAPI PVOID WINAPI DSA_GetItemPtr(_In_ HDSA hdsa, int i);
+
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  DSA_InsertItem(
+    _Inout_ HDSA hdsa,
+    _In_ int i,
+    _In_ void *pitem);
 
   typedef struct _DPA *HDPA;
 
   WINCOMMCTRLAPI HDPA WINAPI DPA_Create(int cItemGrow);
-  WINCOMMCTRLAPI WINBOOL WINAPI DPA_Destroy(HDPA hdpa);
-  WINCOMMCTRLAPI PVOID WINAPI DPA_DeletePtr(HDPA hdpa,int i);
-  WINCOMMCTRLAPI WINBOOL WINAPI DPA_DeleteAllPtrs(HDPA hdpa);
-  WINCOMMCTRLAPI void WINAPI DPA_EnumCallback(HDPA hdpa,PFNDPAENUMCALLBACK pfnCB,void *pData);
-  WINCOMMCTRLAPI void WINAPI DPA_DestroyCallback(HDPA hdpa,PFNDPAENUMCALLBACK pfnCB,void *pData);
-  WINCOMMCTRLAPI WINBOOL WINAPI DPA_SetPtr(HDPA hdpa,int i,void *p);
-  WINCOMMCTRLAPI int WINAPI DPA_InsertPtr(HDPA hdpa,int i,void *p);
-  WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(HDPA hdpa,INT_PTR i);
+  WINCOMMCTRLAPI WINBOOL WINAPI DPA_Destroy(_Inout_opt_ HDPA hdpa);
+  WINCOMMCTRLAPI PVOID WINAPI DPA_DeletePtr(_Inout_ HDPA hdpa, _In_ int i);
+  WINCOMMCTRLAPI WINBOOL WINAPI DPA_DeleteAllPtrs(_Inout_ HDPA hdpa);
+
+  WINCOMMCTRLAPI
+  void
+  WINAPI
+  DPA_EnumCallback(
+    _In_opt_ HDPA hdpa,
+    _In_opt_ PFNDPAENUMCALLBACK pfnCB,
+    _In_opt_ void *pData);
+
+  WINCOMMCTRLAPI
+  void
+  WINAPI
+  DPA_DestroyCallback(
+    _Inout_opt_ HDPA hdpa,
+    _In_ PFNDPAENUMCALLBACK pfnCB,
+    _In_opt_ void *pData);
 
   typedef int (CALLBACK *PFNDPACOMPARE)(void *p1,void *p2,LPARAM lParam);
 
-  WINCOMMCTRLAPI WINBOOL WINAPI DPA_Sort(HDPA hdpa,PFNDPACOMPARE pfnCompare,LPARAM lParam);
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  DPA_Sort(
+    _Inout_ HDPA hdpa,
+    _In_ PFNDPACOMPARE pfnCompare,
+    _In_ LPARAM lParam);
 
 #define DPAS_SORTED 0x1
 #define DPAS_INSERTBEFORE 0x2
 #define DPAS_INSERTAFTER 0x4
 
-  WINCOMMCTRLAPI int WINAPI DPA_Search(HDPA hdpa,void *pFind,int iStart,PFNDPACOMPARE pfnCompare,LPARAM lParam,UINT options);
-  WINCOMMCTRLAPI WINBOOL WINAPI Str_SetPtrW(LPWSTR *ppsz,LPCWSTR psz);
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  DPA_Search(
+    _In_ HDPA hdpa,
+    _In_opt_ void *pFind,
+    _In_ int iStart,
+    _In_ PFNDPACOMPARE pfnCompare,
+    _In_ LPARAM lParam,
+    _In_ UINT options);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI Str_SetPtrW(
+    _Inout_ LPWSTR *ppsz,
+    _In_opt_ LPCWSTR psz);
 
 typedef struct _DPASTREAMINFO {
   int iPos;
@@ -4553,17 +4784,71 @@ typedef struct _DPASTREAMINFO {
 } DPASTREAMINFO;
 
 struct IStream;
-typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, void*);
-typedef void* (CALLBACK *PFNDPAMERGE)(UINT, void*, void*, LPARAM);
-typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*, LPARAM);
-
-  WINCOMMCTRLAPI HRESULT WINAPI DPA_LoadStream(HDPA * phdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData);
-  WINCOMMCTRLAPI HRESULT WINAPI DPA_SaveStream(HDPA hdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData);
-  WINCOMMCTRLAPI WINBOOL WINAPI DPA_Grow(HDPA pdpa, int cp);
-  WINCOMMCTRLAPI int WINAPI DPA_InsertPtr(HDPA hdpa, int i, void *p);
-  WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(HDPA hdpa, INT_PTR i);
-  WINCOMMCTRLAPI WINBOOL WINAPI DPA_SetPtr(HDPA hdpa, int i, void *p);
-  WINCOMMCTRLAPI int WINAPI DPA_GetPtrIndex(HDPA hdpa, const void *p);
+
+typedef HRESULT
+(CALLBACK *PFNDPASTREAM)(
+  _In_ DPASTREAMINFO*,
+  _In_ struct IStream*,
+  _In_opt_ void*);
+
+typedef void*
+(CALLBACK *PFNDPAMERGE)(
+  _In_ UINT,
+  _In_ void*,
+  _In_ void*,
+  _In_ LPARAM);
+
+typedef const void*
+(CALLBACK *PFNDPAMERGECONST)(
+  _In_ UINT,
+  _In_ const void*,
+  _In_ const void*,
+  _In_ LPARAM);
+
+  WINCOMMCTRLAPI
+  HRESULT
+  WINAPI
+  DPA_LoadStream(
+    _Outptr_ HDPA * phdpa,
+    _In_ PFNDPASTREAM pfn,
+    _In_ struct IStream * pstream,
+    _In_opt_ void *pvInstData);
+
+  WINCOMMCTRLAPI
+  HRESULT
+  WINAPI
+  DPA_SaveStream(
+    _In_ HDPA hdpa,
+    _In_ PFNDPASTREAM pfn,
+    _In_ struct IStream * pstream,
+    _In_opt_ void *pvInstData);
+
+  WINCOMMCTRLAPI WINBOOL WINAPI DPA_Grow(_Inout_ HDPA pdpa, _In_ int cp);
+
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  DPA_InsertPtr(
+    _Inout_ HDPA hdpa,
+    _In_ int i,
+    _In_opt_ void *p);
+
+  WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(_In_ HDPA hdpa, _In_ INT_PTR i);
+
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  DPA_SetPtr(
+    _Inout_ HDPA hdpa,
+    _In_ int i,
+    _In_opt_ void *p);
+
+  WINCOMMCTRLAPI
+  int
+  WINAPI
+  DPA_GetPtrIndex(
+    _In_ HDPA hdpa,
+    _In_opt_ const void *p);
 
 #define DPA_GetPtrCount(hdpa) (*(int *)(hdpa))
 #define DPA_SetPtrCount(hdpa, cItems) (*(int *)(hdpa) = (cItems))
@@ -4606,7 +4891,12 @@ typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*,
   } TRACKMOUSEEVENT,*LPTRACKMOUSEEVENT;
 #endif
 
-  WINCOMMCTRLAPI WINBOOL WINAPI _TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
+  WINCOMMCTRLAPI
+  WINBOOL
+  WINAPI
+  _TrackMouseEvent(
+    _Inout_ LPTRACKMOUSEEVENT lpEventTrack);
+
 #endif
 
 #ifndef NOFLATSBAPIS
@@ -4653,11 +4943,46 @@ typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*,
 
   typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,UINT_PTR uIdSubclass,DWORD_PTR dwRefData);
 
-  WINBOOL WINAPI SetWindowSubclass(HWND hWnd,SUBCLASSPROC pfnSubclass,UINT_PTR uIdSubclass,DWORD_PTR dwRefData);
-  WINBOOL WINAPI GetWindowSubclass(HWND hWnd,SUBCLASSPROC pfnSubclass,UINT_PTR uIdSubclass,DWORD_PTR *pdwRefData);
-  WINBOOL WINAPI RemoveWindowSubclass(HWND hWnd,SUBCLASSPROC pfnSubclass,UINT_PTR uIdSubclass);
+  _Success_(return != 0)
+  WINBOOL
+  WINAPI
+  SetWindowSubclass(
+    _In_ HWND hWnd,
+    _In_ SUBCLASSPROC pfnSubclass,
+    _In_ UINT_PTR uIdSubclass,
+    _In_ DWORD_PTR dwRefData);
+
+  _Success_(return != 0)
+  WINBOOL
+  WINAPI
+  GetWindowSubclass(
+    _In_ HWND hWnd,
+    _In_ SUBCLASSPROC pfnSubclass,
+    _In_ UINT_PTR uIdSubclass,
+    _Out_opt_ DWORD_PTR *pdwRefData);
+
+  _Success_(return != 0)
+  WINBOOL
+  WINAPI
+  RemoveWindowSubclass(
+    _In_ HWND hWnd,
+    _In_ SUBCLASSPROC pfnSubclass,
+    _In_ UINT_PTR uIdSubclass);
+
   LRESULT WINAPI DefSubclassProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
-  int WINAPI DrawShadowText(HDC hdc,LPCWSTR pszText,UINT cch,RECT *prc,DWORD dwFlags,COLORREF crText,COLORREF crShadow,int ixOffset,int iyOffset);
+
+  int
+  WINAPI
+  DrawShadowText(
+    _In_ HDC hdc,
+    _In_reads_(cch) LPCWSTR pszText,
+    _In_ UINT cch,
+    _In_ RECT *prc,
+    _In_ DWORD dwFlags,
+    _In_ COLORREF crText,
+    _In_ COLORREF crShadow,
+    _In_ int ixOffset,
+    _In_ int iyOffset);
 
 #ifndef NOTASKDIALOG
 
@@ -4701,7 +5026,13 @@ typedef struct _TASKDIALOG_BUTTON
     PCWSTR  pszButtonText;
 } TASKDIALOG_BUTTON;
 
-typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR);
+typedef HRESULT
+(CALLBACK *PFTASKDIALOGCALLBACK)(
+  _In_ HWND,
+  _In_ UINT,
+  _In_ WPARAM,
+  _In_ LPARAM,
+  _In_ LONG_PTR);
 
 typedef struct _TASKDIALOGCONFIG
 {
@@ -4739,7 +5070,13 @@ typedef struct _TASKDIALOGCONFIG
     UINT        cxWidth;
 } TASKDIALOGCONFIG;
 
-HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *);
+HRESULT
+WINAPI
+TaskDialogIndirect(
+  _In_ const TASKDIALOGCONFIG *,
+  _Out_opt_ int *,
+  _Out_opt_ int *,
+  _Out_opt_ BOOL *);
 
 #include <poppack.h>
 
@@ -4748,5 +5085,6 @@ HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *
 #ifdef __cplusplus
 }
 #endif
+
 #endif
 #endif
index 483ef29..a6715f7 100644 (file)
@@ -668,7 +668,11 @@ typedef struct _MINIDUMP_CALLBACK_OUTPUT
     } DUMMYUNIONNAME;
 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
 
-typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
+typedef BOOL
+(WINAPI* MINIDUMP_CALLBACK_ROUTINE)(
+  _Inout_ PVOID,
+  _In_ const PMINIDUMP_CALLBACK_INPUT,
+  _Inout_ PMINIDUMP_CALLBACK_OUTPUT);
 
 typedef struct _MINIDUMP_CALLBACK_INFORMATION 
 {
@@ -887,12 +891,25 @@ typedef enum _MINIDUMP_STREAM_TYPE
     LastReservedStream          = 0xffff
 } MINIDUMP_STREAM_TYPE;
 
-BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
-                              const PMINIDUMP_EXCEPTION_INFORMATION,
-                              const PMINIDUMP_USER_STREAM_INFORMATION,
-                              const PMINIDUMP_CALLBACK_INFORMATION);
-BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
-                                   ULONG*);
+BOOL
+WINAPI
+MiniDumpWriteDump(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _In_ HANDLE,
+  _In_ MINIDUMP_TYPE,
+  _In_opt_ const PMINIDUMP_EXCEPTION_INFORMATION,
+  _In_opt_ const PMINIDUMP_USER_STREAM_INFORMATION,
+  _In_opt_ const PMINIDUMP_CALLBACK_INFORMATION);
+
+BOOL
+WINAPI
+MiniDumpReadDumpStream(
+  _In_ PVOID,
+  _In_ ULONG,
+  _Outptr_result_maybenull_ PMINIDUMP_DIRECTORY*,
+  _Outptr_result_maybenull_ PVOID*,
+  _Out_opt_ ULONG*);
 
 #include <poppack.h>
 
@@ -904,23 +921,111 @@ BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
 #define SLMFLAG_VIRTUAL         0x1
 #define SLMFLAG_NO_SYMBOLS      0x4
 
-typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
-BOOL   WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);
-typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
-BOOL   WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);
-typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
-BOOL    WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
-typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
-BOOL    WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);
-BOOL    WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
-BOOL    WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);
-DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
-DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD);
-DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
-                               PMODLOAD_DATA, DWORD);
-DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
-                                PMODLOAD_DATA, DWORD);
-BOOL    WINAPI SymUnloadModule64(HANDLE, DWORD64);
+typedef BOOL
+(CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(
+  _In_ PCSTR,
+  _In_ DWORD64,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+EnumerateLoadedModules64(
+  _In_ HANDLE,
+  _In_ PENUMLOADED_MODULES_CALLBACK64,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(
+  _In_ PCWSTR,
+  _In_ DWORD64,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+EnumerateLoadedModulesW64(
+  _In_ HANDLE,
+  _In_ PENUMLOADED_MODULES_CALLBACKW64,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(
+  _In_ PCSTR,
+  _In_ DWORD64,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumerateModules64(
+  _In_ HANDLE,
+  _In_ PSYM_ENUMMODULES_CALLBACK64,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(
+  _In_ PCWSTR,
+  _In_ DWORD64,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumerateModulesW64(
+  _In_ HANDLE,
+  _In_ PSYM_ENUMMODULES_CALLBACKW64,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymGetModuleInfo64(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_ PIMAGEHLP_MODULE64);
+
+BOOL
+WINAPI
+SymGetModuleInfoW64(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_ PIMAGEHLP_MODULEW64);
+
+DWORD64 WINAPI SymGetModuleBase64(_In_ HANDLE, _In_ DWORD64);
+
+DWORD64
+WINAPI
+SymLoadModule64(
+  _In_ HANDLE,
+  _In_opt_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ DWORD64,
+  _In_ DWORD);
+
+DWORD64
+WINAPI
+SymLoadModuleEx(
+  _In_ HANDLE,
+  _In_opt_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ DWORD64,
+  _In_ DWORD,
+  _In_opt_ PMODLOAD_DATA,
+  _In_opt_ DWORD);
+
+DWORD64
+WINAPI
+SymLoadModuleExW(
+  _In_ HANDLE,
+  _In_opt_ HANDLE,
+  _In_opt_ PCWSTR,
+  _In_opt_ PCWSTR,
+  _In_ DWORD64,
+  _In_ DWORD,
+  _In_opt_ PMODLOAD_DATA,
+  _In_opt_ DWORD);
+
+BOOL WINAPI SymUnloadModule64(_In_ HANDLE, _In_ DWORD64);
 
 /*************************
  *    Symbol Handling    *
@@ -1086,83 +1191,494 @@ typedef struct _TI_FINDCHILDREN_PARAMS
 #define SYMSEARCH_RECURSE               0x02
 #define SYMSEARCH_GLOBALSONLY           0x04
 
-BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
-BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS);
-typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
-typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
-BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
-BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
-BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
-BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);
-BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO);
-BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW);
-BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO);
-BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW);
-BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
-BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64);
-BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO);
-BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW);
-BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64);
-BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64);
-BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);
-BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64);
-BOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID);
-BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
-                           PVOID);
-BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,
-                            PVOID);
-typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
-typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
-BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID);
-BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID);
-BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
-BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
-typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
-BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
-BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
-BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD);
-BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL);
-BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL);
-BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL);
-BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
-BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD);
-DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
-DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD);
-BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
-BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
-BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
-BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
-BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD);
-BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD);
-BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD);
-BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD);
+BOOL
+WINAPI
+SymGetTypeInfo(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _In_ ULONG,
+  _In_ IMAGEHLP_SYMBOL_TYPE_INFO,
+  _Out_ PVOID);
+
+BOOL
+WINAPI
+SymGetTypeInfoEx(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Inout_ PIMAGEHLP_GET_TYPE_INFO_PARAMS);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(
+  _In_ PSYMBOL_INFO,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(
+  _In_ PSYMBOL_INFOW,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumTypes(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumTypesW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymFromAddr(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_opt_ DWORD64*,
+  _Inout_ SYMBOL_INFO*);
+
+BOOL
+WINAPI
+SymFromAddrW(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_opt_ DWORD64*,
+  _Inout_ SYMBOL_INFOW*);
+
+BOOL
+WINAPI
+SymFromToken(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _In_ DWORD,
+  _Inout_ PSYMBOL_INFO);
+
+BOOL
+WINAPI
+SymFromTokenW(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _In_ DWORD,
+  _Inout_ PSYMBOL_INFOW);
+
+BOOL WINAPI SymFromName(_In_ HANDLE, _In_ PCSTR, _Inout_ PSYMBOL_INFO);
+BOOL WINAPI SymFromNameW(_In_ HANDLE, _In_ PCWSTR, _Inout_ PSYMBOL_INFOW);
+
+BOOL
+WINAPI
+SymGetSymFromAddr64(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_opt_ PDWORD64,
+  _Inout_ PIMAGEHLP_SYMBOL64);
+
+BOOL
+WINAPI
+SymGetSymFromName64(
+  _In_ HANDLE,
+  _In_ PCSTR,
+  _Inout_ PIMAGEHLP_SYMBOL64);
+
+BOOL
+WINAPI
+SymGetTypeFromName(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PCSTR,
+  _Inout_ PSYMBOL_INFO);
+
+BOOL
+WINAPI
+SymGetTypeFromNameW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PCWSTR,
+  _Inout_ PSYMBOL_INFOW);
+
+BOOL WINAPI SymGetSymNext64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymNextW64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW64);
+BOOL WINAPI SymGetSymPrev64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymPrevW64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW64);
+
+BOOL
+WINAPI
+SymEnumSym(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSymbols(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCSTR,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSymbolsW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCWSTR,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(
+  _In_ PCSTR,
+  _In_ DWORD64,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(
+  _In_ PCWSTR,
+  _In_ DWORD64,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumerateSymbols64(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PSYM_ENUMSYMBOLS_CALLBACK64,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumerateSymbolsW64(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PSYM_ENUMSYMBOLS_CALLBACK64W,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSymbolsForAddr(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSymbolsForAddrW(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(
+  _In_ HANDLE,
+  _In_ ULONG,
+  _In_opt_ ULONG64,
+  _In_opt_ ULONG64);
+
+BOOL
+WINAPI
+SymRegisterCallback64(
+  _In_ HANDLE,
+  _In_ PSYMBOL_REGISTERED_CALLBACK64,
+  _In_ ULONG64);
+
+BOOL
+WINAPI
+SymRegisterCallbackW64(
+  _In_ HANDLE,
+  _In_ PSYMBOL_REGISTERED_CALLBACK64,
+  _In_ ULONG64);
+
+BOOL
+WINAPI
+SymUnDName64(
+  _In_ PIMAGEHLP_SYMBOL64,
+  _Out_writes_(UnDecNameLength) PSTR,
+  _In_ DWORD UnDecNameLength);
+
+BOOL WINAPI SymMatchString(_In_ PCSTR, _In_ PCSTR, _In_ BOOL);
+BOOL WINAPI SymMatchStringA(_In_ PCSTR, _In_ PCSTR, _In_ BOOL);
+BOOL WINAPI SymMatchStringW(_In_ PCWSTR, _In_ PCWSTR, _In_ BOOL);
+
+BOOL
+WINAPI
+SymSearch(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ DWORD,
+  _In_opt_ DWORD,
+  _In_opt_ PCSTR,
+  _In_opt_ DWORD64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
+  _In_opt_ PVOID,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+SymSearchW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ DWORD,
+  _In_opt_ DWORD,
+  _In_opt_ PCWSTR,
+  _In_opt_ DWORD64,
+  _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
+  _In_opt_ PVOID,
+  _In_ DWORD);
+
+DWORD
+WINAPI
+UnDecorateSymbolName(
+  _In_ PCSTR,
+  _Out_writes_(maxStringLength) PSTR,
+  _In_ DWORD maxStringLength,
+  _In_ DWORD);
+
+DWORD
+WINAPI
+UnDecorateSymbolNameW(
+  _In_ PCWSTR,
+  _Out_writes_(maxStringLength) PWSTR,
+  _In_ DWORD maxStringLength,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+SymGetScope(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ DWORD,
+  _Inout_ PSYMBOL_INFO);
+
+BOOL
+WINAPI
+SymGetScopeW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ DWORD,
+  _Inout_ PSYMBOL_INFOW);
+
+BOOL
+WINAPI
+SymFromIndex(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ DWORD,
+  _Inout_ PSYMBOL_INFO);
+
+BOOL
+WINAPI
+SymFromIndexW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ DWORD,
+  _Inout_ PSYMBOL_INFOW);
+
+BOOL
+WINAPI
+SymAddSymbol(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PCSTR,
+  _In_ DWORD64,
+  _In_ DWORD,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+SymAddSymbolW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PCWSTR,
+  _In_ DWORD64,
+  _In_ DWORD,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+SymDeleteSymbol(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCSTR,
+  _In_ DWORD64,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+SymDeleteSymbolW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCWSTR,
+  _In_ DWORD64,
+  _In_ DWORD);
 
 /*************************
  *      Source Files     *
  *************************/
-typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
-typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
-
-BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK,
-                               PVOID);
-BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID);
-BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
-BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);
-BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);
-BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64);
-BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);
-BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64);
-BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64);
-BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64);
-ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG);
-BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD);
-BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD);
-BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*);
-BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*);
-BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD);
-BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD);
-BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD);
-BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(
+  _In_ PSOURCEFILE,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(
+  _In_ PSOURCEFILEW,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSourceFiles(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCSTR,
+  _In_ PSYM_ENUMSOURCEFILES_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSourceFilesW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCWSTR,
+  _In_ PSYM_ENUMSOURCEFILES_CALLBACKW,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymGetLineFromAddr64(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_ PDWORD,
+  _Out_ PIMAGEHLP_LINE64);
+
+BOOL
+WINAPI
+SymGetLineFromAddrW64(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_ PDWORD,
+  _Out_ PIMAGEHLP_LINEW64);
+
+BOOL WINAPI SymGetLinePrev64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLinePrevW64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLineNext64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineNextW64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW64);
+
+BOOL
+WINAPI
+SymGetLineFromName64(
+  _In_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ DWORD,
+  _Out_ PLONG,
+  _Inout_ PIMAGEHLP_LINE64);
+
+BOOL
+WINAPI
+SymGetLineFromNameW64(
+  _In_ HANDLE,
+  _In_opt_ PCWSTR,
+  _In_opt_ PCWSTR,
+  _In_ DWORD,
+  _Out_ PLONG,
+  _Inout_ PIMAGEHLP_LINEW64);
+
+ULONG
+WINAPI
+SymGetFileLineOffsets64(
+  _In_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(BufferLines) PDWORD64,
+  _In_ ULONG BufferLines);
+
+BOOL
+WINAPI
+SymGetSourceFile(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(Size) PSTR,
+  _In_ DWORD Size);
+
+BOOL
+WINAPI
+SymGetSourceFileW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCWSTR,
+  _In_ PCWSTR,
+  _Out_writes_(Size) PWSTR,
+  _In_ DWORD Size);
+
+BOOL
+WINAPI
+SymGetSourceFileToken(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PCSTR,
+  _Outptr_ PVOID*,
+  _Out_ DWORD*);
+
+BOOL
+WINAPI
+SymGetSourceFileTokenW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ PCWSTR,
+  _Outptr_ PVOID*,
+  _Out_ DWORD*);
+
+BOOL
+WINAPI
+SymGetSourceFileFromToken(
+  _In_ HANDLE,
+  _In_ PVOID,
+  _In_opt_ PCSTR,
+  _Out_writes_(Size) PSTR,
+  _In_ DWORD Size);
+
+BOOL
+WINAPI
+SymGetSourceFileFromTokenW(
+  _In_ HANDLE,
+  _In_ PVOID,
+  _In_opt_ PCWSTR,
+  _Out_writes_(Size) PWSTR,
+  _In_ DWORD Size);
+
+BOOL
+WINAPI
+SymGetSourceVarFromToken(
+  _In_ HANDLE,
+  _In_ PVOID,
+  _In_opt_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(Size) PSTR,
+  _In_ DWORD Size);
+
+BOOL
+WINAPI
+SymGetSourceVarFromTokenW(
+  _In_ HANDLE,
+  _In_ PVOID,
+  _In_opt_ PCWSTR,
+  _In_ PCWSTR,
+  _Out_writes_(Size) PWSTR,
+  _In_ DWORD Size);
 
 typedef struct _SRCCODEINFO
 {
@@ -1186,66 +1702,349 @@ typedef struct _SRCCODEINFOW
     DWORD64     Address;
 } SRCCODEINFOW, *PSRCCODEINFOW;
 
-typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
-typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
-BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);
-BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID);
-BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID);
-BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID);
+typedef BOOL
+(CALLBACK* PSYM_ENUMLINES_CALLBACK)(
+  _In_ PSRCCODEINFO,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK* PSYM_ENUMLINES_CALLBACKW)(
+  _In_ PSRCCODEINFOW,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumLines(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ PSYM_ENUMLINES_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumLinesW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCWSTR,
+  _In_opt_ PCWSTR,
+  _In_ PSYM_ENUMLINES_CALLBACKW,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSourceLines(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_opt_ DWORD,
+  _In_ DWORD,
+  _In_ PSYM_ENUMLINES_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumSourceLinesW(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_opt_ PCWSTR,
+  _In_opt_ PCWSTR,
+  _In_opt_ DWORD,
+  _In_ DWORD,
+  _In_ PSYM_ENUMLINES_CALLBACKW,
+  _In_opt_ PVOID);
 
 /*************************
  * File & image handling *
  *************************/
-BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL);
-BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL);
-BOOL WINAPI SymCleanup(HANDLE);
-
-HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR);
-typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
-typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
-HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
-HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
-HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
-HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
-typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID);
-typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID);
+
+BOOL WINAPI SymInitialize(_In_ HANDLE, _In_opt_ PCSTR, _In_ BOOL);
+BOOL WINAPI SymInitializeW(_In_ HANDLE, _In_opt_ PCWSTR, _In_ BOOL);
+BOOL WINAPI SymCleanup(_In_ HANDLE);
+
+HANDLE
+WINAPI
+FindDebugInfoFile(
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR);
+
+typedef BOOL
+(CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(
+  _In_ HANDLE,
+  _In_ PCSTR,
+  _In_ PVOID);
+
+typedef BOOL
+(CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(
+  _In_ HANDLE,
+  _In_ PCWSTR,
+  _In_ PVOID);
+
+HANDLE
+WINAPI
+FindDebugInfoFileEx(
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR,
+  _In_opt_ PFIND_DEBUG_FILE_CALLBACK,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+FindDebugInfoFileExW(
+  _In_ PCWSTR,
+  _In_ PCWSTR,
+  _Out_writes_(MAX_PATH + 1) PWSTR,
+  _In_opt_ PFIND_DEBUG_FILE_CALLBACKW,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+SymFindDebugInfoFile(
+  _In_ HANDLE,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR,
+  _In_opt_ PFIND_DEBUG_FILE_CALLBACK,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+SymFindDebugInfoFileW(
+  _In_ HANDLE,
+  _In_ PCWSTR,
+  _Out_writes_(MAX_PATH + 1) PWSTR,
+  _In_opt_ PFIND_DEBUG_FILE_CALLBACKW,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PFINDFILEINPATHCALLBACK)(
+  _In_ PCSTR,
+  _In_ PVOID);
+
+typedef BOOL
+(CALLBACK *PFINDFILEINPATHCALLBACKW)(
+  _In_ PCWSTR,
+  _In_ PVOID);
+
 BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
                            PSTR, PFINDFILEINPATHCALLBACK, PVOID);
-BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
-                              PSTR, PFINDFILEINPATHCALLBACK, PVOID);
-BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
-                              PWSTR, PFINDFILEINPATHCALLBACKW, PVOID);
-HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR);
-typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
-typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
-HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
-HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
-HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
-HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
-PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
-PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
-                                         PIMAGE_SECTION_HEADER *);
-PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
-PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
-PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
-BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
-BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD);
-BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR);
-BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR);
-DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
-BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
-BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR);
-BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR);
-typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID);
-typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
-BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID);
-BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID);
-BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*);
-BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*);
-PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);
-PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR);
-PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);
-PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);
+
+BOOL
+WINAPI
+SymFindFileInPath(
+  _In_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_ PCSTR,
+  _In_opt_ PVOID,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_(MAX_PATH + 1) PSTR,
+  _In_opt_ PFINDFILEINPATHCALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymFindFileInPathW(
+  _In_ HANDLE,
+  _In_opt_ PCWSTR,
+  _In_ PCWSTR,
+  _In_opt_ PVOID,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_(MAX_PATH + 1) PWSTR,
+  _In_opt_ PFINDFILEINPATHCALLBACKW,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+FindExecutableImage(
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR);
+
+typedef BOOL
+(CALLBACK *PFIND_EXE_FILE_CALLBACK)(
+  _In_ HANDLE,
+  _In_ PCSTR,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PFIND_EXE_FILE_CALLBACKW)(
+  _In_ HANDLE,
+  _In_ PCWSTR,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+FindExecutableImageEx(
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR,
+  _In_opt_ PFIND_EXE_FILE_CALLBACK,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+FindExecutableImageExW(
+  _In_ PCWSTR,
+  _In_ PCWSTR,
+  _Out_writes_(MAX_PATH + 1) PWSTR,
+  _In_opt_ PFIND_EXE_FILE_CALLBACKW,
+  _In_opt_ PVOID);
+
+HANDLE
+WINAPI
+SymFindExecutableImage(
+  _In_ HANDLE,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR,
+  _In_ PFIND_EXE_FILE_CALLBACK,
+  _In_ PVOID);
+
+HANDLE
+WINAPI
+SymFindExecutableImageW(
+  _In_ HANDLE,
+  _In_ PCWSTR,
+  _Out_writes_(MAX_PATH + 1) PWSTR,
+  _In_ PFIND_EXE_FILE_CALLBACKW,
+  _In_ PVOID);
+
+PIMAGE_NT_HEADERS WINAPI ImageNtHeader(_In_ PVOID);
+
+PVOID
+WINAPI
+ImageDirectoryEntryToDataEx(
+  _In_ PVOID,
+  _In_ BOOLEAN,
+  _In_ USHORT,
+  _Out_ PULONG,
+  _Out_opt_ PIMAGE_SECTION_HEADER *);
+
+PVOID
+WINAPI
+ImageDirectoryEntryToData(
+  _In_ PVOID,
+  _In_ BOOLEAN,
+  _In_ USHORT,
+  _Out_ PULONG);
+
+PIMAGE_SECTION_HEADER
+WINAPI
+ImageRvaToSection(
+  _In_ PIMAGE_NT_HEADERS,
+  _In_ PVOID,
+  _In_ ULONG);
+
+PVOID
+WINAPI
+ImageRvaToVa(
+  _In_ PIMAGE_NT_HEADERS,
+  _In_ PVOID,
+  _In_ ULONG,
+  _In_opt_ PIMAGE_SECTION_HEADER*);
+
+BOOL
+WINAPI
+SymGetSearchPath(
+  _In_ HANDLE,
+  _Out_writes_(SearchPathLength) PSTR,
+  _In_ DWORD SearchPathLength);
+
+BOOL
+WINAPI
+SymGetSearchPathW(
+  _In_ HANDLE,
+  _Out_writes_(SearchPathLength) PWSTR,
+  _In_ DWORD SearchPathLength);
+
+BOOL WINAPI SymSetSearchPath(_In_ HANDLE, _In_opt_ PCSTR);
+BOOL WINAPI SymSetSearchPathW(_In_ HANDLE, _In_opt_ PCWSTR);
+DWORD WINAPI GetTimestampForLoadedLibrary(_In_ HMODULE);
+BOOL WINAPI MakeSureDirectoryPathExists(_In_ PCSTR);
+
+BOOL
+WINAPI
+SearchTreeForFile(
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_(MAX_PATH + 1) PSTR);
+
+BOOL
+WINAPI
+SearchTreeForFileW(
+  _In_ PCWSTR,
+  _In_ PCWSTR,
+  _Out_writes_(MAX_PATH + 1) PWSTR);
+
+typedef BOOL
+(CALLBACK *PENUMDIRTREE_CALLBACK)(
+  _In_ PCSTR,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PENUMDIRTREE_CALLBACKW)(
+  _In_ PCWSTR,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+EnumDirTree(
+  _In_opt_ HANDLE,
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Out_writes_opt_(MAX_PATH + 1) PSTR,
+  _In_opt_ PENUMDIRTREE_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+EnumDirTreeW(
+  _In_opt_ HANDLE,
+  _In_ PCWSTR,
+  _In_ PCWSTR,
+  _Out_writes_opt_(MAX_PATH + 1) PWSTR,
+  _In_opt_ PENUMDIRTREE_CALLBACKW,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymMatchFileName(
+  _In_ PCSTR,
+  _In_ PCSTR,
+  _Outptr_opt_ PSTR*,
+  _Outptr_opt_ PSTR*);
+
+BOOL
+WINAPI
+SymMatchFileNameW(
+  _In_ PCWSTR,
+  _In_ PCWSTR,
+  _Outptr_opt_ PWSTR*,
+  _Outptr_opt_ PWSTR*);
+
+PCHAR WINAPI SymSetHomeDirectory(_In_opt_ HANDLE, _In_opt_ PCSTR);
+PWSTR WINAPI SymSetHomeDirectoryW(_In_opt_ HANDLE, _In_opt_ PCWSTR);
+
+PCHAR
+WINAPI
+SymGetHomeDirectory(
+  _In_ DWORD,
+  _Out_writes_(size) PSTR,
+  _In_ size_t size);
+
+PWSTR
+WINAPI
+SymGetHomeDirectoryW(
+  _In_ DWORD,
+  _Out_writes_(size) PWSTR,
+  _In_ size_t size);
+
 #define hdBase  0
 #define hdSym   1
 #define hdSrc   2
@@ -1254,7 +2053,13 @@ PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);
 /*************************
  *   Context management  *
  *************************/
-BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
+
+BOOL
+WINAPI
+SymSetContext(
+  _In_ HANDLE,
+  _In_ PIMAGEHLP_STACK_FRAME,
+  _In_opt_ PIMAGEHLP_CONTEXT);
 
 
 /*************************
@@ -1325,22 +2130,57 @@ typedef struct _STACKFRAME64
     KDHELP64    KdHelp;
 } STACKFRAME64, *LPSTACKFRAME64;
 
-typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)
-    (HANDLE, DWORD64, PVOID, DWORD, PDWORD);
-typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
-typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
-typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
-BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,
-                        PREAD_PROCESS_MEMORY_ROUTINE64,
-                        PFUNCTION_TABLE_ACCESS_ROUTINE64,
-                        PGET_MODULE_BASE_ROUTINE64,
-                        PTRANSLATE_ADDRESS_ROUTINE64);
-
-PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
-
-typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);
-
-BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);
+typedef BOOL
+(CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(
+  _In_ HANDLE,
+  _In_ DWORD64,
+  _Out_writes_bytes_(nSize) PVOID,
+  _In_ DWORD nSize,
+  _Out_ PDWORD);
+
+typedef PVOID
+(CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
+  _In_ HANDLE,
+  _In_ DWORD64);
+
+typedef DWORD64
+(CALLBACK *PGET_MODULE_BASE_ROUTINE64)(
+  _In_ HANDLE,
+  _In_ DWORD64);
+
+typedef DWORD64
+(CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(
+  _In_ HANDLE,
+  _In_ HANDLE,
+  _In_ LPADDRESS64);
+
+BOOL
+WINAPI
+StackWalk64(
+  _In_ DWORD,
+  _In_ HANDLE,
+  _In_ HANDLE,
+  _Inout_ LPSTACKFRAME64,
+  _Inout_ PVOID,
+  _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64,
+  _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64,
+  _In_opt_ PGET_MODULE_BASE_ROUTINE64,
+  _In_opt_ PTRANSLATE_ADDRESS_ROUTINE64);
+
+PVOID WINAPI SymFunctionTableAccess64(_In_ HANDLE, _In_ DWORD64);
+
+typedef PVOID
+(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(
+  _In_ HANDLE,
+  _In_ ULONG64,
+  _In_ ULONG64);
+
+BOOL
+WINAPI
+SymRegisterFunctionEntryCallback64(
+  _In_ HANDLE,
+  _In_ PSYMBOL_FUNCENTRY_CALLBACK64,
+  _In_ ULONG64);
 
 /*************************
  * Version, global stuff *
@@ -1357,7 +2197,7 @@ typedef struct API_VERSION
 } API_VERSION, *LPAPI_VERSION;
 
 LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
-LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
+LPAPI_VERSION WINAPI ImagehlpApiVersionEx(_In_ LPAPI_VERSION);
 
 typedef struct _IMAGE_DEBUG_INFORMATION
 {
@@ -1395,14 +2235,20 @@ typedef struct _IMAGE_DEBUG_INFORMATION
 } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
 
 
-PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);
+PIMAGE_DEBUG_INFORMATION
+WINAPI
+MapDebugInformation(
+  _In_opt_ HANDLE,
+  _In_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ ULONG);
 
-BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
+BOOL WINAPI UnmapDebugInformation(_Out_ PIMAGE_DEBUG_INFORMATION);
 
-DWORD   WINAPI  SymGetOptions(void);
-DWORD   WINAPI  SymSetOptions(DWORD);
+DWORD WINAPI SymGetOptions(void);
+DWORD WINAPI SymSetOptions(_In_ DWORD);
 
-BOOL WINAPI SymSetParentWindow(HWND);
+BOOL WINAPI SymSetParentWindow(_In_ HWND);
 
 /*************************
  * Version, global stuff *
@@ -1485,45 +2331,215 @@ typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);
 
 #else
 
-typedef BOOL  (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
-typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
-typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
-typedef BOOL  (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);
-typedef BOOL  (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
-typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
-typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
-typedef BOOL  (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
-typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);
-typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
-
-BOOL    WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
-BOOL    WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
-BOOL    WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
-BOOL    WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
-BOOL    WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID);
-PVOID   WINAPI SymFunctionTableAccess(HANDLE, DWORD);
-BOOL    WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
-BOOL    WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW);
-BOOL    WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE);
-BOOL    WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
-BOOL    WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW);
-BOOL    WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
-BOOL    WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW);
-DWORD   WINAPI SymGetModuleBase(HANDLE, DWORD);
-BOOL    WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
-BOOL    WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
-BOOL    WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
-BOOL    WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL);
-BOOL    WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
-BOOL    WINAPI SymGetSymNextW(HANDLE, PIMAGEHLP_SYMBOLW);
-BOOL    WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
-BOOL    WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW);
-DWORD   WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);
-BOOL    WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
-BOOL    WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);
-BOOL    WINAPI SymRefreshModuleList(HANDLE);
-BOOL    WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
-BOOL    WINAPI SymUnloadModule(HANDLE, DWORD);
+typedef BOOL
+(CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
+  _In_ PCSTR,
+  _In_ ULONG,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+typedef PVOID
+(CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(
+  _In_ HANDLE,
+  _In_ DWORD);
+
+typedef DWORD
+(CALLBACK *PGET_MODULE_BASE_ROUTINE)(
+  _In_ HANDLE,
+  _In_ DWORD);
+
+typedef BOOL
+(CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _Out_writes_bytes_(nSize) PVOID,
+  _In_ DWORD nSize,
+  _Out_ PDWORD);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
+  _In_ PCSTR,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
+  _In_ PCSTR,
+  _In_ ULONG,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(
+  _In_ PCWSTR,
+  _In_ ULONG,
+  _In_ ULONG,
+  _In_opt_ PVOID);
+
+typedef BOOL
+(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
+  _In_ HANDLE,
+  _In_ ULONG,
+  _In_opt_ PVOID,
+  _In_opt_ PVOID);
+
+typedef PVOID
+(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _In_opt_ PVOID);
+
+typedef DWORD
+(CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(
+  _In_ HANDLE,
+  _In_ HANDLE,
+  _Out_ LPADDRESS);
+
+BOOL
+WINAPI
+EnumerateLoadedModules(
+  _In_ HANDLE,
+  _In_ PENUMLOADED_MODULES_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+StackWalk(
+  _In_ DWORD,
+  _In_ HANDLE,
+  _In_ HANDLE,
+  _Inout_ LPSTACKFRAME,
+  _Inout_ PVOID,
+  _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE,
+  _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE,
+  _In_opt_ PGET_MODULE_BASE_ROUTINE,
+  _In_opt_ PTRANSLATE_ADDRESS_ROUTINE);
+
+BOOL
+WINAPI
+SymEnumerateModules(
+  _In_ HANDLE,
+  _In_ PSYM_ENUMMODULES_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumerateSymbols(
+  _In_ HANDLE,
+  _In_ ULONG,
+  _In_ PSYM_ENUMSYMBOLS_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymEnumerateSymbolsW(
+  _In_ HANDLE,
+  _In_ ULONG,
+  _In_ PSYM_ENUMSYMBOLS_CALLBACKW,
+  _In_opt_ PVOID);
+
+PVOID WINAPI SymFunctionTableAccess(_In_ HANDLE, _In_ DWORD);
+
+BOOL
+WINAPI
+SymGetLineFromAddr(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _Out_ PDWORD,
+  _Out_ PIMAGEHLP_LINE);
+
+BOOL
+WINAPI
+SymGetLineFromAddrW(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _Out_ PDWORD,
+  _Out_ PIMAGEHLP_LINEW);
+
+BOOL
+WINAPI
+SymGetLineFromName(
+  _In_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ DWORD,
+  _Out_ PLONG,
+  _Inout_ PIMAGEHLP_LINE);
+
+BOOL WINAPI SymGetLineNext(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE);
+BOOL WINAPI SymGetLineNextW(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW);
+BOOL WINAPI SymGetLinePrev(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE);
+BOOL WINAPI SymGetLinePrevW(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW);
+DWORD WINAPI SymGetModuleBase(_In_ HANDLE, _In_ DWORD);
+
+BOOL
+WINAPI
+SymGetModuleInfo(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _Out_ PIMAGEHLP_MODULE);
+
+BOOL
+WINAPI
+SymGetModuleInfoW(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _Out_ PIMAGEHLP_MODULEW);
+
+BOOL
+WINAPI
+SymGetSymFromAddr(
+  _In_ HANDLE,
+  _In_ DWORD,
+  _Out_opt_ PDWORD,
+  _Inout_ PIMAGEHLP_SYMBOL);
+
+BOOL
+WINAPI
+SymGetSymFromName(
+  _In_ HANDLE,
+  _In_ PCSTR,
+  _Inout_ PIMAGEHLP_SYMBOL);
+
+BOOL WINAPI SymGetSymNext(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL);
+BOOL WINAPI SymGetSymNextW(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW);
+BOOL WINAPI SymGetSymPrev(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL);
+BOOL WINAPI SymGetSymPrevW(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW);
+
+DWORD
+WINAPI
+SymLoadModule(
+  _In_ HANDLE,
+  _In_opt_ HANDLE,
+  _In_opt_ PCSTR,
+  _In_opt_ PCSTR,
+  _In_ DWORD,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+SymRegisterCallback(
+  _In_ HANDLE,
+  _In_ PSYMBOL_REGISTERED_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL
+WINAPI
+SymRegisterFunctionEntryCallback(
+  _In_ HANDLE,
+  _In_ PSYMBOL_FUNCENTRY_CALLBACK,
+  _In_opt_ PVOID);
+
+BOOL WINAPI SymRefreshModuleList(_In_ HANDLE);
+
+BOOL
+WINAPI
+SymUnDName(
+  _In_ PIMAGEHLP_SYMBOL,
+  _Out_writes_(UnDecNameLength) PSTR,
+  _In_ DWORD UnDecNameLength);
+
+BOOL WINAPI SymUnloadModule(_In_ HANDLE, _In_ DWORD);
 
 #endif
 
index 7653fa3..8392252 100644 (file)
@@ -51,15 +51,15 @@ extern "C" {
 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
 
-#define KSDATAFORMAT_BIT_ATTRIBUTES                         1
-#define KSDATAFORMAT_ATTRIBUTES                             (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
+#define KSDATAFORMAT_BIT_ATTRIBUTES 1
+#define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
 
 #if defined(_NTDDK_)
 typedef PVOID PKSWORKER;
 #endif
 
 #ifndef SIZEOF_ARRAY
-    #define SIZEOF_ARRAY(a)        (sizeof(a)/sizeof((a)[0]))
+#define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
 #endif
 
 /* ===============================================================
@@ -67,33 +67,38 @@ typedef PVOID PKSWORKER;
 */
 
 #ifndef _NTRTL_
-    #ifndef DEFINE_GUIDEX
-        #ifdef _MSC_VER
-            #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
-        #else
-            #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
-        #endif
-    #endif
-
-    #ifndef STATICGUIDOF
-        #define STATICGUIDOF(guid) STATIC_##guid
-    #endif
+
+#ifndef DEFINE_GUIDEX
+#ifdef _MSC_VER
+#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
+#else
+#define DEFINE_GUIDEX(name) EXTERN_C const GUID name
+#endif
+#endif /* !DEFINE_GUIDEX */
+
+#ifndef STATICGUIDOF
+#define STATICGUIDOF(guid) STATIC_##guid
 #endif
 
+#endif /* !_NTRTL_ */
+
 #if defined(__cplusplus)
-    #if _MSC_VER >= 1100
-        #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
-        #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
-    #else
-        #define DEFINE_GUIDSTRUCT(guid, name)          \
-            extern const DECLSPEC_SELECTANY GUID __uuid__##name={STATIC_##name};
-        #define DEFINE_GUIDNAMED(name) __uuid__##name
-    #endif
+
+#if _MSC_VER >= 1100
+#define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
+#define DEFINE_GUIDNAMED(name) __uuidof(struct name)
 #else
-    #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
-    #define DEFINE_GUIDNAMED(name) name
+#define DEFINE_GUIDSTRUCT(guid, name) \
+  extern const DECLSPEC_SELECTANY GUID __uuid__##name={STATIC_##name};
+#define DEFINE_GUIDNAMED(name) __uuid__##name
 #endif
 
+#else /* __cplusplus */
+
+#define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
+#define DEFINE_GUIDNAMED(name) name
+
+#endif /* __cplusplus */
 
 #define STATIC_GUID_NULL \
     0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
@@ -165,7 +170,6 @@ DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_P
         METHOD_NEITHER, \
         FILE_ANY_ACCESS)
 
-
 /* ===============================================================
     Categories
 */
@@ -249,11 +253,10 @@ DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);
     Common
 */
 
-typedef struct
-{
-    GUID Set;
-    ULONG Id;
-    ULONG Flags;
+typedef struct {
+  GUID Set;
+  ULONG Id;
+  ULONG Flags;
 } KSIDENTIFIER, *PKSIDENTIFIER;
 
 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
@@ -266,131 +269,116 @@ typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;
 typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
 
 typedef union {
-    struct {
-        ULONG   FormatSize;
-        ULONG   Flags;
-        ULONG   SampleSize;
-        ULONG   Reserved;
-        GUID    MajorFormat;
-        GUID    SubFormat;
-        GUID    Specifier;
-    };
-    LONGLONG    Alignment;
+  struct {
+    ULONG FormatSize;
+    ULONG Flags;
+    ULONG SampleSize;
+    ULONG Reserved;
+    GUID MajorFormat;
+    GUID SubFormat;
+    GUID Specifier;
+  };
+  LONGLONG Alignment;
 } KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
 
-
-typedef struct
-{
-    ULONG Size;
-    ULONG Flags;
-    GUID Attribute;
+typedef struct {
+  ULONG Size;
+  ULONG Flags;
+  GUID Attribute;
 } KSATTRIBUTE, *PKSATTRIBUTE;
 
 
-
 /* ===============================================================
     Interface Sets - TODO
 */
 
 #if 0
 #define KSINTERFACESETID_Media
-
 #define KSINTERFACE_STANDARD_STREAMING
 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
 #define KSINTERFACE_STANDARD_CONTROL
 #endif
 
 #define STATIC_KSINTERFACESETID_Standard \
-    0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard);
 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
 
-typedef enum
-{
-    KSINTERFACE_STANDARD_STREAMING,
-    KSINTERFACE_STANDARD_LOOPED_STREAMING,
-    KSINTERFACE_STANDARD_CONTROL
+typedef enum {
+  KSINTERFACE_STANDARD_STREAMING,
+  KSINTERFACE_STANDARD_LOOPED_STREAMING,
+  KSINTERFACE_STANDARD_CONTROL
 } KSINTERFACE_STANDARD;
 
 #define STATIC_KSINTERFACESETID_FileIo \
-    0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+  0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo);
 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
 
-
-
-
 /* ===============================================================
     Mediums
 */
 
-typedef enum
-{
-    KSINTERFACE_FILEIO_STREAMING
+typedef enum {
+  KSINTERFACE_FILEIO_STREAMING
 } KSINTERFACE_FILEIO;
 
 #define KSMEDIUM_TYPE_ANYINSTANCE       0
 
 #define STATIC_KSMEDIUMSETID_Standard \
-    0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard);
 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
 
-
 /* ===============================================================
     Clock Properties/Methods/Events
 */
 
 #define STATIC_KSPROPSETID_Clock \
-    0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock);
 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
 
-typedef enum
-{
-    KSPROPERTY_CLOCK_TIME,
-    KSPROPERTY_CLOCK_PHYSICALTIME,
-    KSPROPERTY_CLOCK_CORRELATEDTIME,
-    KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
-    KSPROPERTY_CLOCK_RESOLUTION,
-    KSPROPERTY_CLOCK_STATE,
+typedef enum {
+  KSPROPERTY_CLOCK_TIME,
+  KSPROPERTY_CLOCK_PHYSICALTIME,
+  KSPROPERTY_CLOCK_CORRELATEDTIME,
+  KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
+  KSPROPERTY_CLOCK_RESOLUTION,
+  KSPROPERTY_CLOCK_STATE,
 #if defined(_NTDDK_)
-    KSPROPERTY_CLOCK_FUNCTIONTABLE
+  KSPROPERTY_CLOCK_FUNCTIONTABLE
 #endif // defined(_NTDDK_)
 } KSPROPERTY_CLOCK;
 
 #define STATIC_KSEVENTSETID_Clock \
-    0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock);
 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
 
-typedef enum
-{
-    KSEVENT_CLOCK_INTERVAL_MARK,
-    KSEVENT_CLOCK_POSITION_MARK
+typedef enum {
+  KSEVENT_CLOCK_INTERVAL_MARK,
+  KSEVENT_CLOCK_POSITION_MARK
 } KSEVENT_CLOCK_POSITION;
 
-
 /* ===============================================================
     Connection Properties/Methods/Events
 */
 
 #define STATIC_KSPROPSETID_Connection \
-       0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection);
 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
 
-
-typedef enum
-{
-    KSPROPERTY_CONNECTION_STATE,
-    KSPROPERTY_CONNECTION_PRIORITY,
-    KSPROPERTY_CONNECTION_DATAFORMAT,
-    KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
-    KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
-    KSPROPERTY_CONNECTION_ACQUIREORDERING,
-    KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
-    KSPROPERTY_CONNECTION_STARTAT
+typedef enum {
+  KSPROPERTY_CONNECTION_STATE,
+  KSPROPERTY_CONNECTION_PRIORITY,
+  KSPROPERTY_CONNECTION_DATAFORMAT,
+  KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
+  KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
+  KSPROPERTY_CONNECTION_ACQUIREORDERING,
+  KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
+  KSPROPERTY_CONNECTION_STARTAT
 } KSPROPERTY_CONNECTION;
 
 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
@@ -462,111 +450,103 @@ typedef enum
         (Handler),\
         NULL, 0, NULL, NULL, 0)
 
-
-typedef enum
-{
-    KSEVENT_CONNECTION_POSITIONUPDATE,
-    KSEVENT_CONNECTION_DATADISCONTINUITY,
-    KSEVENT_CONNECTION_TIMEDISCONTINUITY,
-    KSEVENT_CONNECTION_PRIORITY,
-    KSEVENT_CONNECTION_ENDOFSTREAM
+typedef enum {
+  KSEVENT_CONNECTION_POSITIONUPDATE,
+  KSEVENT_CONNECTION_DATADISCONTINUITY,
+  KSEVENT_CONNECTION_TIMEDISCONTINUITY,
+  KSEVENT_CONNECTION_PRIORITY,
+  KSEVENT_CONNECTION_ENDOFSTREAM
 } KSEVENT_CONNECTION;
 
-
 /* ===============================================================
     General
     Properties/Methods/Events
 */
 
 #define STATIC_KSPROPSETID_General\
-    0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+  0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General);
 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
 
-
-typedef enum
-{
-    KSPROPERTY_GENERAL_COMPONENTID
+typedef enum {
+  KSPROPERTY_GENERAL_COMPONENTID
 } KSPROPERTY_GENERAL;
 
-
 /* ===============================================================
     Graph Manager
     Properties/Methods/Events
 */
 
 #define KSPROPSETID_GM \
-    0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
+  0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
 
-typedef enum
-{
-    KSPROPERTY_GM_GRAPHMANAGER,
-    KSPROPERTY_GM_TIMESTAMP_CLOCK,
-    KSPROPERTY_GM_RATEMATCH,
-    KSPROPERTY_GM_RENDERCLOCK
+typedef enum {
+  KSPROPERTY_GM_GRAPHMANAGER,
+  KSPROPERTY_GM_TIMESTAMP_CLOCK,
+  KSPROPERTY_GM_RATEMATCH,
+  KSPROPERTY_GM_RENDERCLOCK
 } KSPROPERTY_GM;
 
-
 /* ===============================================================
     Media Seeking
     Properties/Methods/Events
 */
 
 #define STATIC_KSPROPSETID_MediaSeeking\
-    0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+  0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking);
 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
 
 typedef enum {
-    KSPROPERTY_MEDIASEEKING_CAPABILITIES,
-    KSPROPERTY_MEDIASEEKING_FORMATS,
-    KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
-    KSPROPERTY_MEDIASEEKING_POSITION,
-    KSPROPERTY_MEDIASEEKING_STOPPOSITION,
-    KSPROPERTY_MEDIASEEKING_POSITIONS,
-    KSPROPERTY_MEDIASEEKING_DURATION,
-    KSPROPERTY_MEDIASEEKING_AVAILABLE,
-    KSPROPERTY_MEDIASEEKING_PREROLL,
-    KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
+  KSPROPERTY_MEDIASEEKING_CAPABILITIES,
+  KSPROPERTY_MEDIASEEKING_FORMATS,
+  KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
+  KSPROPERTY_MEDIASEEKING_POSITION,
+  KSPROPERTY_MEDIASEEKING_STOPPOSITION,
+  KSPROPERTY_MEDIASEEKING_POSITIONS,
+  KSPROPERTY_MEDIASEEKING_DURATION,
+  KSPROPERTY_MEDIASEEKING_AVAILABLE,
+  KSPROPERTY_MEDIASEEKING_PREROLL,
+  KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
 } KSPROPERTY_MEDIASEEKING;
 
 typedef enum {
-    KS_SEEKING_NoPositioning,
-    KS_SEEKING_AbsolutePositioning,
-    KS_SEEKING_RelativePositioning,
-    KS_SEEKING_IncrementalPositioning,
-    KS_SEEKING_PositioningBitsMask = 0x3,
-    KS_SEEKING_SeekToKeyFrame,
-    KS_SEEKING_ReturnTime = 0x8
+  KS_SEEKING_NoPositioning,
+  KS_SEEKING_AbsolutePositioning,
+  KS_SEEKING_RelativePositioning,
+  KS_SEEKING_IncrementalPositioning,
+  KS_SEEKING_PositioningBitsMask = 0x3,
+  KS_SEEKING_SeekToKeyFrame,
+  KS_SEEKING_ReturnTime = 0x8
 } KS_SEEKING_FLAGS;
 
 typedef enum {
-    KS_SEEKING_CanSeekAbsolute = 0x1,
-    KS_SEEKING_CanSeekForwards = 0x2,
-    KS_SEEKING_CanSeekBackwards = 0x4,
-    KS_SEEKING_CanGetCurrentPos = 0x8,
-    KS_SEEKING_CanGetStopPos = 0x10,
-    KS_SEEKING_CanGetDuration = 0x20,
-    KS_SEEKING_CanPlayBackwards = 0x40
+  KS_SEEKING_CanSeekAbsolute = 0x1,
+  KS_SEEKING_CanSeekForwards = 0x2,
+  KS_SEEKING_CanSeekBackwards = 0x4,
+  KS_SEEKING_CanGetCurrentPos = 0x8,
+  KS_SEEKING_CanGetStopPos = 0x10,
+  KS_SEEKING_CanGetDuration = 0x20,
+  KS_SEEKING_CanPlayBackwards = 0x40
 } KS_SEEKING_CAPABILITIES;
 
 typedef struct {
-    LONGLONG            Current;
-    LONGLONG            Stop;
-    KS_SEEKING_FLAGS    CurrentFlags;
-    KS_SEEKING_FLAGS    StopFlags;
+  LONGLONG Current;
+  LONGLONG Stop;
+  KS_SEEKING_FLAGS CurrentFlags;
+  KS_SEEKING_FLAGS StopFlags;
 } KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
 
 typedef struct {
-    LONGLONG    Earliest;
-    LONGLONG    Latest;
+  LONGLONG Earliest;
+  LONGLONG Latest;
 } KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
 
 typedef struct {
-    KSPROPERTY  Property;
-    GUID        SourceFormat;
-    GUID        TargetFormat;
-    LONGLONG    Time;
+  KSPROPERTY Property;
+  GUID SourceFormat;
+  GUID TargetFormat;
+  LONGLONG Time;
 } KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
 
 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
@@ -657,96 +637,87 @@ typedef struct {
 */
 
 #define STATIC_KSPROPSETID_Pin\
-    0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}
+  0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin);
 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
 
 #define STATIC_KSNAME_Pin\
-    0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin);
 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
 
-
-typedef enum
-{
-    KSPROPERTY_PIN_CINSTANCES,
-    KSPROPERTY_PIN_CTYPES,
-    KSPROPERTY_PIN_DATAFLOW,
-    KSPROPERTY_PIN_DATARANGES,
-    KSPROPERTY_PIN_DATAINTERSECTION,
-    KSPROPERTY_PIN_INTERFACES,
-    KSPROPERTY_PIN_MEDIUMS,
-    KSPROPERTY_PIN_COMMUNICATION,
-    KSPROPERTY_PIN_GLOBALCINSTANCES,
-    KSPROPERTY_PIN_NECESSARYINSTANCES,
-    KSPROPERTY_PIN_PHYSICALCONNECTION,
-    KSPROPERTY_PIN_CATEGORY,
-    KSPROPERTY_PIN_NAME,
-    KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
-    KSPROPERTY_PIN_PROPOSEDATAFORMAT
+typedef enum {
+  KSPROPERTY_PIN_CINSTANCES,
+  KSPROPERTY_PIN_CTYPES,
+  KSPROPERTY_PIN_DATAFLOW,
+  KSPROPERTY_PIN_DATARANGES,
+  KSPROPERTY_PIN_DATAINTERSECTION,
+  KSPROPERTY_PIN_INTERFACES,
+  KSPROPERTY_PIN_MEDIUMS,
+  KSPROPERTY_PIN_COMMUNICATION,
+  KSPROPERTY_PIN_GLOBALCINSTANCES,
+  KSPROPERTY_PIN_NECESSARYINSTANCES,
+  KSPROPERTY_PIN_PHYSICALCONNECTION,
+  KSPROPERTY_PIN_CATEGORY,
+  KSPROPERTY_PIN_NAME,
+  KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
+  KSPROPERTY_PIN_PROPOSEDATAFORMAT
 } KSPROPERTY_PIN;
 
-typedef struct
-{
-    KSPROPERTY      Property;
-    ULONG           PinId;
-    ULONG           Reserved;
+typedef struct {
+  KSPROPERTY Property;
+  ULONG PinId;
+  ULONG Reserved;
 } KSP_PIN, *PKSP_PIN;
 
-#define KSINSTANCE_INDETERMINATE    ((ULONG)-1)
+#define KSINSTANCE_INDETERMINATE ((ULONG)-1)
 
-typedef struct
-{
-    ULONG  PossibleCount;
-    ULONG  CurrentCount;
+typedef struct {
+  ULONG PossibleCount;
+  ULONG CurrentCount;
 } KSPIN_CINSTANCES, *PKSPIN_CINSTANCES;
 
-typedef struct
-{
-    ULONG   Size;
-    ULONG   Pin;
-    WCHAR   SymbolicLinkName[1];
+typedef struct {
+  ULONG Size;
+  ULONG Pin;
+  WCHAR SymbolicLinkName[1];
 } KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION;
 
-
 /* ===============================================================
     Quality
     Properties/Methods/Events
 */
 
 #define KSPROPSETID_Quality \
-    0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
+  0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 
-typedef enum
-{
-    KSPROPERTY_QUALITY_REPORT,
-    KSPROPERTY_QUALITY_ERROR
+typedef enum {
+  KSPROPERTY_QUALITY_REPORT,
+  KSPROPERTY_QUALITY_ERROR
 } KSPROPERTY_QUALITY;
 
-
 /* ===============================================================
     Stream
     Properties/Methods/Events
 */
 
 #define STATIC_KSPROPSETID_Stream\
-    0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
+  0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream);
 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
 
-typedef enum
-{
-    KSPROPERTY_STREAM_ALLOCATOR,
-    KSPROPERTY_STREAM_QUALITY,
-    KSPROPERTY_STREAM_DEGRADATION,
-    KSPROPERTY_STREAM_MASTERCLOCK,
-    KSPROPERTY_STREAM_TIMEFORMAT,
-    KSPROPERTY_STREAM_PRESENTATIONTIME,
-    KSPROPERTY_STREAM_PRESENTATIONEXTENT,
-    KSPROPERTY_STREAM_FRAMETIME,
-    KSPROPERTY_STREAM_RATECAPABILITY,
-    KSPROPERTY_STREAM_RATE,
-    KSPROPERTY_STREAM_PIPE_ID
+typedef enum {
+  KSPROPERTY_STREAM_ALLOCATOR,
+  KSPROPERTY_STREAM_QUALITY,
+  KSPROPERTY_STREAM_DEGRADATION,
+  KSPROPERTY_STREAM_MASTERCLOCK,
+  KSPROPERTY_STREAM_TIMEFORMAT,
+  KSPROPERTY_STREAM_PRESENTATIONTIME,
+  KSPROPERTY_STREAM_PRESENTATIONEXTENT,
+  KSPROPERTY_STREAM_FRAMETIME,
+  KSPROPERTY_STREAM_RATECAPABILITY,
+  KSPROPERTY_STREAM_RATE,
+  KSPROPERTY_STREAM_PIPE_ID
 } KSPROPERTY_STREAM;
 
 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
@@ -849,64 +820,57 @@ typedef enum
 */
 
 #define STATIC_KSPROPSETID_StreamAllocator\
-    0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
+  0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator);
 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
 
-typedef enum
-{
-    KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
-    KSPROPERTY_STREAMALLOCATOR_STATUS
+typedef enum {
+  KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
+  KSPROPERTY_STREAMALLOCATOR_STATUS
 } KSPROPERTY_STREAMALLOCATOR;
 
 #define KSMETHODSETID_StreamAllocator \
-    0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
+  0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
 
-typedef enum
-{
-    KSMETHOD_STREAMALLOCATOR_ALLOC,
-    KSMETHOD_STREAMALLOCATOR_FREE
+typedef enum {
+  KSMETHOD_STREAMALLOCATOR_ALLOC,
+  KSMETHOD_STREAMALLOCATOR_FREE
 } KSMETHOD_STREAMALLOCATOR;
 
-
 #define KSEVENTSETID_StreamAllocator
 
-typedef enum
-{
-    KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
-    KSEVENT_STREAMALLOCATOR_FREEFRAME
+typedef enum {
+  KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
+  KSEVENT_STREAMALLOCATOR_FREEFRAME
 } KSEVENT_STREAMALLOCATOR;
 
-
 /* ===============================================================
     StreamInterface
     Properties/Methods/Events
 */
 
 #define KSPROPSETID_StreamInterface \
-    0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
+  0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
 
-typedef enum
-{
-    KSPROPERTY_STREAMINTERFACE_HEADERSIZE
+typedef enum {
+  KSPROPERTY_STREAMINTERFACE_HEADERSIZE
 } KSPROPERTY_STREAMINTERFACE;
 
-
 /* ===============================================================
     Topology
     Properties/Methods/Events
 */
 
 #define STATIC_KSPROPSETID_Topology\
-    0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);
 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
 
 typedef enum {
-    KSPROPERTY_TOPOLOGY_CATEGORIES,
-    KSPROPERTY_TOPOLOGY_NODES,
-    KSPROPERTY_TOPOLOGY_CONNECTIONS,
-    KSPROPERTY_TOPOLOGY_NAME
+  KSPROPERTY_TOPOLOGY_CATEGORIES,
+  KSPROPERTY_TOPOLOGY_NODES,
+  KSPROPERTY_TOPOLOGY_CONNECTIONS,
+  KSPROPERTY_TOPOLOGY_NAME
 } KSPROPERTY_TOPOLOGY;
 
 /* ===============================================================
@@ -914,7 +878,7 @@ typedef enum {
 */
 
 #define STATIC_KSPROPTYPESETID_General \
-       0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+  0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General);
 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
 
@@ -1065,51 +1029,43 @@ DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_Genera
     KSNODETYPE_VOLUME
 */
 
-
-typedef PVOID   KSDEVICE_HEADER,
-                KSOBJECT_HEADER,
-                KSOBJECT_BAG;
-
-
-
+typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER, KSOBJECT_BAG;
 
 /* ===============================================================
     Method Types
 */
 
-#define KSMETHOD_TYPE_NONE          0x00000000
-#define KSMETHOD_TYPE_READ          0x00000001
-#define KSMETHOD_TYPE_WRITE         0x00000002
-#define KSMETHOD_TYPE_MODIFY        0x00000003
-#define KSMETHOD_TYPE_SOURCE        0x00000004
-#define KSMETHOD_TYPE_SEND          0x00000001
-#define KSMETHOD_TYPE_SETSUPPORT    0x00000100
-#define KSMETHOD_TYPE_BASICSUPPORT  0x00000200
-
+#define KSMETHOD_TYPE_NONE         0x00000000
+#define KSMETHOD_TYPE_READ         0x00000001
+#define KSMETHOD_TYPE_WRITE        0x00000002
+#define KSMETHOD_TYPE_MODIFY       0x00000003
+#define KSMETHOD_TYPE_SOURCE       0x00000004
+#define KSMETHOD_TYPE_SEND         0x00000001
+#define KSMETHOD_TYPE_SETSUPPORT   0x00000100
+#define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
 
 /* ===============================================================
     Property Types
 */
 
-#define KSPROPERTY_TYPE_GET             0x00000001
-#define KSPROPERTY_TYPE_SET             0x00000002
-#define KSPROPERTY_TYPE_SETSUPPORT      0x00000100
-#define KSPROPERTY_TYPE_BASICSUPPORT    0x00000200
-#define KSPROPERTY_TYPE_RELATIONS       0x00000400
-#define KSPROPERTY_TYPE_SERIALIZESET    0x00000800
-#define KSPROPERTY_TYPE_UNSERIALIZESET  0x00001000
-#define KSPROPERTY_TYPE_SERIALIZERAW    0x00002000
-#define KSPROPERTY_TYPE_UNSERIALIZERAW  0x00004000
-#define KSPROPERTY_TYPE_SERIALIZESIZE   0x00008000
-#define KSPROPERTY_TYPE_DEFAULT_VALUES  0x00010000
-
+#define KSPROPERTY_TYPE_GET            0x00000001
+#define KSPROPERTY_TYPE_SET            0x00000002
+#define KSPROPERTY_TYPE_SETSUPPORT     0x00000100
+#define KSPROPERTY_TYPE_BASICSUPPORT   0x00000200
+#define KSPROPERTY_TYPE_RELATIONS      0x00000400
+#define KSPROPERTY_TYPE_SERIALIZESET   0x00000800
+#define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
+#define KSPROPERTY_TYPE_SERIALIZERAW   0x00002000
+#define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
+#define KSPROPERTY_TYPE_SERIALIZESIZE  0x00008000
+#define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
 
 /* ===============================================================
     Topology Methods/Properties
 */
 
-#define KSMETHOD_TYPE_TOPOLOGY          0x10000000
-#define KSPROPERTY_TYPE_TOPOLOGY        0x10000000
+#define KSMETHOD_TYPE_TOPOLOGY         0x10000000
+#define KSPROPERTY_TYPE_TOPOLOGY       0x10000000
 
 /*
 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
@@ -1221,11 +1177,10 @@ typedef PVOID   KSDEVICE_HEADER,
 */
 
 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
-    0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+  0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE);
 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
 
-
 /* ===============================================================
     KSMEMORY_TYPE_xxx
 
@@ -1274,620 +1229,567 @@ DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER
 
 #endif
 
-
-typedef enum
-{
-    KsObjectTypeDevice,
-    KsObjectTypeFilterFactory,
-    KsObjectTypeFilter,
-    KsObjectTypePin
+typedef enum {
+  KsObjectTypeDevice,
+  KsObjectTypeFilterFactory,
+  KsObjectTypeFilter,
+  KsObjectTypePin
 } KSOBJECTTYPE;
 
-typedef enum
-{
-    KSSTATE_STOP,
-    KSSTATE_ACQUIRE,
-    KSSTATE_PAUSE,
-    KSSTATE_RUN
+typedef enum {
+  KSSTATE_STOP,
+  KSSTATE_ACQUIRE,
+  KSSTATE_PAUSE,
+  KSSTATE_RUN
 } KSSTATE, *PKSSTATE;
 
-typedef enum
-{
-    KSTARGET_STATE_DISABLED,
-    KSTARGET_STATE_ENABLED
+typedef enum {
+  KSTARGET_STATE_DISABLED,
+  KSTARGET_STATE_ENABLED
 } KSTARGET_STATE;
 
-typedef enum
-{
-    KSRESET_BEGIN,
-    KSRESET_END
+typedef enum {
+  KSRESET_BEGIN,
+  KSRESET_END
 } KSRESET;
 
-typedef enum
-{
-    KSEVENTS_NONE,
-    KSEVENTS_SPINLOCK,
-    KSEVENTS_MUTEX,
-    KSEVENTS_FMUTEX,
-    KSEVENTS_FMUTEXUNSAFE,
-    KSEVENTS_INTERRUPT,
-    KSEVENTS_ERESOURCE
+typedef enum {
+  KSEVENTS_NONE,
+  KSEVENTS_SPINLOCK,
+  KSEVENTS_MUTEX,
+  KSEVENTS_FMUTEX,
+  KSEVENTS_FMUTEXUNSAFE,
+  KSEVENTS_INTERRUPT,
+  KSEVENTS_ERESOURCE
 } KSEVENTS_LOCKTYPE;
 
-typedef enum
-{
-    KSDEGRADE_STANDARD_SIMPLE,
-    KSDEGRADE_STANDARD_QUALITY,
-    KSDEGRADE_STANDARD_COMPUTATION,
-    KSDEGRADE_STANDARD_SKIP
+typedef enum {
+  KSDEGRADE_STANDARD_SIMPLE,
+  KSDEGRADE_STANDARD_QUALITY,
+  KSDEGRADE_STANDARD_COMPUTATION,
+  KSDEGRADE_STANDARD_SKIP
 } KSDEGRADE_STANDARD;
 
-typedef enum
-{
-    KSPIN_DATAFLOW_IN = 1,
-    KSPIN_DATAFLOW_OUT
+typedef enum {
+  KSPIN_DATAFLOW_IN = 1,
+  KSPIN_DATAFLOW_OUT
 } KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;
 
-typedef enum
-{
-    KSPIN_COMMUNICATION_NONE,
-    KSPIN_COMMUNICATION_SINK,
-    KSPIN_COMMUNICATION_SOURCE,
-    KSPIN_COMMUNICATION_BOTH,
-    KSPIN_COMMUNICATION_BRIDGE
+typedef enum {
+  KSPIN_COMMUNICATION_NONE,
+  KSPIN_COMMUNICATION_SINK,
+  KSPIN_COMMUNICATION_SOURCE,
+  KSPIN_COMMUNICATION_BOTH,
+  KSPIN_COMMUNICATION_BRIDGE
 } KSPIN_COMMUNICATION, *PKSPIN_COMMUNICATION;
 
-typedef enum
-{
-    KsListEntryTail,
-    KsListEntryHead
+typedef enum {
+  KsListEntryTail,
+  KsListEntryHead
 } KSLIST_ENTRY_LOCATION;
 
-typedef enum
-{
-    KsStackCopyToNewLocation,
-    KsStackReuseCurrentLocation,
-    KsStackUseNewLocation
+typedef enum {
+  KsStackCopyToNewLocation,
+  KsStackReuseCurrentLocation,
+  KsStackUseNewLocation
 } KSSTACK_USE;
 
-typedef enum
-{
-    KsAcquireOnly,
-    KsAcquireAndRemove,
-    KsAcquireOnlySingleItem,
-    KsAcquireAndRemoveOnlySingleItem
+typedef enum {
+  KsAcquireOnly,
+  KsAcquireAndRemove,
+  KsAcquireOnlySingleItem,
+  KsAcquireAndRemoveOnlySingleItem
 } KSIRP_REMOVAL_OPERATION;
 
-typedef enum
-{
-    KsInvokeOnSuccess = 1,
-    KsInvokeOnError = 2,
-    KsInvokeOnCancel = 4
+typedef enum {
+  KsInvokeOnSuccess = 1,
+  KsInvokeOnError = 2,
+  KsInvokeOnCancel = 4
 } KSCOMPLETION_INVOCATION;
 
-
-#if defined(_NTDDK_)
-/* MOVE ME */
-typedef NTSTATUS (NTAPI *PFNKSCONTEXT_DISPATCH)(
-    IN PVOID Context,
-    IN PIRP Irp);
-#endif
-
 #if defined(_NTDDK_) && !defined(__wtypes_h__)
 enum VARENUM {
-    VT_EMPTY = 0,
-    VT_NULL = 1,
-    VT_I2 = 2,
-    VT_I4 = 3,
-    VT_R4 = 4,
-    VT_R8 = 5,
-    VT_CY = 6,
-    VT_DATE = 7,
-    VT_BSTR = 8,
-    VT_DISPATCH = 9,
-    VT_ERROR = 10,
-    VT_BOOL = 11,
-    VT_VARIANT = 12,
-    VT_UNKNOWN = 13,
-    VT_DECIMAL = 14,
-    VT_I1 = 16,
-    VT_UI1 = 17,
-    VT_UI2 = 18,
-    VT_UI4 = 19,
-    VT_I8 = 20,
-    VT_UI8 = 21,
-    VT_INT = 22,
-    VT_UINT = 23,
-    VT_VOID = 24,
-    VT_HRESULT  = 25,
-    VT_PTR = 26,
-    VT_SAFEARRAY = 27,
-    VT_CARRAY = 28,
-    VT_USERDEFINED = 29,
-    VT_LPSTR = 30,
-    VT_LPWSTR = 31,
-    VT_FILETIME = 64,
-    VT_BLOB = 65,
-    VT_STREAM = 66,
-    VT_STORAGE = 67,
-    VT_STREAMED_OBJECT = 68,
-    VT_STORED_OBJECT = 69,
-    VT_BLOB_OBJECT = 70,
-    VT_CF = 71,
-    VT_CLSID = 72,
-    VT_VECTOR = 0x1000,
-    VT_ARRAY = 0x2000,
-    VT_BYREF = 0x4000,
-    VT_RESERVED = 0x8000,
-    VT_ILLEGAL = 0xffff,
-    VT_ILLEGALMASKED = 0xfff,
-    VT_TYPEMASK = 0xfff
+  VT_EMPTY = 0,
+  VT_NULL = 1,
+  VT_I2 = 2,
+  VT_I4 = 3,
+  VT_R4 = 4,
+  VT_R8 = 5,
+  VT_CY = 6,
+  VT_DATE = 7,
+  VT_BSTR = 8,
+  VT_DISPATCH = 9,
+  VT_ERROR = 10,
+  VT_BOOL = 11,
+  VT_VARIANT = 12,
+  VT_UNKNOWN = 13,
+  VT_DECIMAL = 14,
+  VT_I1 = 16,
+  VT_UI1 = 17,
+  VT_UI2 = 18,
+  VT_UI4 = 19,
+  VT_I8 = 20,
+  VT_UI8 = 21,
+  VT_INT = 22,
+  VT_UINT = 23,
+  VT_VOID = 24,
+  VT_HRESULT  = 25,
+  VT_PTR = 26,
+  VT_SAFEARRAY = 27,
+  VT_CARRAY = 28,
+  VT_USERDEFINED = 29,
+  VT_LPSTR = 30,
+  VT_LPWSTR = 31,
+  VT_FILETIME = 64,
+  VT_BLOB = 65,
+  VT_STREAM = 66,
+  VT_STORAGE = 67,
+  VT_STREAMED_OBJECT = 68,
+  VT_STORED_OBJECT = 69,
+  VT_BLOB_OBJECT = 70,
+  VT_CF = 71,
+  VT_CLSID = 72,
+  VT_VECTOR = 0x1000,
+  VT_ARRAY = 0x2000,
+  VT_BYREF = 0x4000,
+  VT_RESERVED = 0x8000,
+  VT_ILLEGAL = 0xffff,
+  VT_ILLEGALMASKED = 0xfff,
+  VT_TYPEMASK = 0xfff
 };
 #endif
 
-#define STATIC_KSDATAFORMAT_TYPE_WILDCARD       STATIC_GUID_NULL
-#define KSDATAFORMAT_TYPE_WILDCARD              GUID_NULL
+#define STATIC_KSDATAFORMAT_TYPE_WILDCARD      STATIC_GUID_NULL
+#define KSDATAFORMAT_TYPE_WILDCARD             GUID_NULL
 
-#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD    STATIC_GUID_NULL
-#define KSDATAFORMAT_SUBTYPE_WILDCARD           GUID_NULL
+#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD   STATIC_GUID_NULL
+#define KSDATAFORMAT_SUBTYPE_WILDCARD          GUID_NULL
 
-#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD  STATIC_GUID_NULL
-#define KSDATAFORMAT_SPECIFIER_WILDCARD         GUID_NULL
+#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
+#define KSDATAFORMAT_SPECIFIER_WILDCARD        GUID_NULL
 
 /* ===============================================================
     Framing
 */
 
-typedef struct
-{
-    ULONG   MinFrameSize;
-    ULONG   MaxFrameSize;
-    ULONG   Stepping;
+typedef struct {
+  ULONG MinFrameSize;
+  ULONG MaxFrameSize;
+  ULONG Stepping;
 } KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
 
-typedef struct
-{
-    KS_FRAMING_RANGE  Range;
-    ULONG             InPlaceWeight;
-    ULONG             NotInPlaceWeight;
+typedef struct {
+  KS_FRAMING_RANGE Range;
+  ULONG InPlaceWeight;
+  ULONG NotInPlaceWeight;
 } KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
 
-typedef struct
-{
-    GUID                        MemoryType;
-    GUID                        BusType;
-    ULONG                       MemoryFlags;
-    ULONG                       BusFlags;   
-    ULONG                       Flags;   
-    ULONG                       Frames;
-    ULONG                       FileAlignment;
-    ULONG                       MemoryTypeWeight;
-    KS_FRAMING_RANGE            PhysicalRange;
-    KS_FRAMING_RANGE_WEIGHTED   FramingRange; 
+typedef struct {
+  GUID MemoryType;
+  GUID BusType;
+  ULONG MemoryFlags;
+  ULONG BusFlags;
+  ULONG Flags;
+  ULONG Frames;
+  ULONG FileAlignment;
+  ULONG MemoryTypeWeight;
+  KS_FRAMING_RANGE PhysicalRange;
+  KS_FRAMING_RANGE_WEIGHTED FramingRange;
 } KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
 
-typedef struct
-{
-    ULONG   RatioNumerator;
-    ULONG   RatioDenominator; 
-    ULONG   RatioConstantMargin;
+typedef struct {
+  ULONG RatioNumerator;
+  ULONG RatioDenominator;
+  ULONG RatioConstantMargin;
 } KS_COMPRESSION, *PKS_COMPRESSION;
 
-
 /* ===============================================================
     Priorities
 */
 
-#define KSPRIORITY_LOW          0x00000001
-#define KSPRIORITY_NORMAL       0x40000000
-#define KSPRIORITY_HIGH         0x80000000
-#define KSPRIORITY_EXCLUSIVE    0xFFFFFFFF
+#define KSPRIORITY_LOW       0x00000001
+#define KSPRIORITY_NORMAL    0x40000000
+#define KSPRIORITY_HIGH      0x80000000
+#define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
 
-typedef struct
-{
-    ULONG PriorityClass;
-    ULONG PrioritySubClass;
+typedef struct {
+  ULONG PriorityClass;
+  ULONG PrioritySubClass;
 } KSPRIORITY, *PKSPRIORITY;
 
-
 /* ===============================================================
     Dispatch Table
     http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
 */
+
 #if defined(_NTDDK_)
-typedef struct
-{
-    PDRIVER_DISPATCH DeviceIoControl;
-    PDRIVER_DISPATCH Read;
-    PDRIVER_DISPATCH Write;
-    PDRIVER_DISPATCH Flush;
-    PDRIVER_DISPATCH Close;
-    PDRIVER_DISPATCH QuerySecurity;
-    PDRIVER_DISPATCH SetSecurity;
-    PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
-    PFAST_IO_READ FastRead;
-    PFAST_IO_WRITE FastWrite;
-} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
 
+typedef struct {
+  PDRIVER_DISPATCH DeviceIoControl;
+  PDRIVER_DISPATCH Read;
+  PDRIVER_DISPATCH Write;
+  PDRIVER_DISPATCH Flush;
+  PDRIVER_DISPATCH Close;
+  PDRIVER_DISPATCH QuerySecurity;
+  PDRIVER_DISPATCH SetSecurity;
+  PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
+  PFAST_IO_READ FastRead;
+  PFAST_IO_WRITE FastWrite;
+} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
 
-#define KSCREATE_ITEM_IRP_STORAGE(Irp)      (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
-#define KSEVENT_SET_IRP_STORAGE(Irp)        (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
-#define KSEVENT_ITEM_IRP_STORAGE(Irp)       (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
-#define KSEVENT_ENTRY_IRP_STORAGE(Irp)      (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
-#define KSMETHOD_SET_IRP_STORAGE(Irp)       (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
-#define KSMETHOD_ITEM_IRP_STORAGE(Irp)      (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
-#define KSMETHOD_TYPE_IRP_STORAGE(Irp)      (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
-#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp)   (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
-#define KSPROPERTY_SET_IRP_STORAGE(Irp)     (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
-#define KSPROPERTY_ITEM_IRP_STORAGE(Irp)    (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
+#define KSCREATE_ITEM_IRP_STORAGE(Irp)         (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSEVENT_SET_IRP_STORAGE(Irp)           (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSEVENT_ITEM_IRP_STORAGE(Irp)          (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
+#define KSEVENT_ENTRY_IRP_STORAGE(Irp)         (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSMETHOD_SET_IRP_STORAGE(Irp)          (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSMETHOD_ITEM_IRP_STORAGE(Irp)         (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
+#define KSMETHOD_TYPE_IRP_STORAGE(Irp)         (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
+#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp)      (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
+#define KSPROPERTY_SET_IRP_STORAGE(Irp)        (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
+#define KSPROPERTY_ITEM_IRP_STORAGE(Irp)       (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
 
-typedef 
-VOID
-(NTAPI *PFNREFERENCEDEVICEOBJECT)( 
-    IN PVOID Context
-    );
-    
-typedef 
-VOID
-(NTAPI *PFNDEREFERENCEDEVICEOBJECT)( 
-    IN PVOID Context
-    );
-    
-typedef
-NTSTATUS
-(NTAPI *PFNQUERYREFERENCESTRING)( 
-    IN PVOID Context,
-    IN OUT PWCHAR *String
-    );
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef VOID
+(NTAPI *PFNREFERENCEDEVICEOBJECT)(
+  _In_ PVOID Context);
 
-typedef struct
-{
-    INTERFACE                   Interface;
-    PFNREFERENCEDEVICEOBJECT    ReferenceDeviceObject;
-    PFNDEREFERENCEDEVICEOBJECT  DereferenceDeviceObject;
-    PFNQUERYREFERENCESTRING     QueryReferenceString;
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef VOID
+(NTAPI *PFNDEREFERENCEDEVICEOBJECT)(
+  _In_ PVOID Context);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNQUERYREFERENCESTRING)(
+  _In_ PVOID Context,
+  _Inout_ PWCHAR *String);
+
+typedef struct {
+  INTERFACE Interface;
+  PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
+  PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
+  PFNQUERYREFERENCESTRING QueryReferenceString;
 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
 
-typedef struct
-{
-    KDPC            Dpc;
-    ULONG           ReferenceCount;
-    KSPIN_LOCK      AccessLock;
+typedef struct {
+  KDPC Dpc;
+  ULONG ReferenceCount;
+  KSPIN_LOCK AccessLock;
 } KSDPC_ITEM, *PKSDPC_ITEM;
 
-typedef struct
-{
-    KSDPC_ITEM          DpcItem;
-    LIST_ENTRY          BufferList;
+typedef struct {
+  KSDPC_ITEM DpcItem;
+  LIST_ENTRY BufferList;
 } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
 
-#endif
+#endif /* _NTDDK_ */
 
-typedef struct
-{
-    GUID    Manufacturer;
-    GUID    Product;
-    GUID    Component;
-    GUID    Name;
-    ULONG   Version;
-    ULONG   Revision;
+typedef struct {
+  GUID Manufacturer;
+  GUID Product;
+  GUID Component;
+  GUID Name;
+  ULONG Version;
+  ULONG Revision;
 } KSCOMPONENTID, *PKSCOMPONENTID;
 
 /* ===============================================================
     Properties
 */
 
-typedef struct
-{
-    GUID            PropertySet;
-    ULONG           Count;
+typedef struct {
+  GUID PropertySet;
+  ULONG Count;
 } KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
 
-typedef struct
-{
-    KSIDENTIFIER    PropTypeSet;
-    ULONG           Id;
-    ULONG           PropertyLength;
+typedef struct {
+  KSIDENTIFIER PropTypeSet;
+  ULONG Id;
+  ULONG PropertyLength;
 } KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
 
-
-typedef union
-{
-    struct {
-        LONG    SignedMinimum;
-        LONG    SignedMaximum;
-    
+typedef union {
+  struct {
+    LONG SignedMinimum;
+    LONG SignedMaximum;
 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
-     }_SIGNED;
+  _SIGNED;
 #else
-     };
+  };
 #endif
-
-       struct {
-        ULONG   UnsignedMinimum;
-        ULONG   UnsignedMaximum;
+  struct {
+    ULONG UnsignedMinimum;
+    ULONG UnsignedMaximum;
 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
-     }_UNSIGNED;
+  _UNSIGNED;
 #else
-     };
+  };
 #endif
-
 } KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
 
-typedef union
-{
-    struct {
-        LONGLONG    SignedMinimum;
-        LONGLONG    SignedMaximum;
+typedef union {
+  struct {
+    LONGLONG SignedMinimum;
+    LONGLONG SignedMaximum;
 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
-     }_SIGNED64;
+  _SIGNED64;
 #else
-     };
+  };
 #endif
-
-    struct {
+  struct {
 #if defined(_NTDDK_)
-        ULONGLONG   UnsignedMinimum;
-        ULONGLONG   UnsignedMaximum;
+    ULONGLONG UnsignedMinimum;
+    ULONGLONG UnsignedMaximum;
 #else
-        DWORDLONG   UnsignedMinimum;
-        DWORDLONG   UnsignedMaximum;
+    DWORDLONG UnsignedMinimum;
+    DWORDLONG UnsignedMaximum;
 #endif
 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
-     }_UNSIGNED64;
+  _UNSIGNED64;
 #else
-     };
+  };
 #endif
 } KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
 
-typedef struct
-{
-    ULONG           AccessFlags;
-    ULONG           DescriptionSize;
-    KSIDENTIFIER    PropTypeSet;
-    ULONG           MembersListCount;
-    ULONG           Reserved;
+typedef struct {
+  ULONG AccessFlags;
+  ULONG DescriptionSize;
+  KSIDENTIFIER PropTypeSet;
+  ULONG MembersListCount;
+  ULONG Reserved;
 } KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
 
-typedef struct
-{
-    ULONG   MembersFlags;
-    ULONG   MembersSize;
-    ULONG   MembersCount;
-    ULONG   Flags;
+typedef struct {
+  ULONG MembersFlags;
+  ULONG MembersSize;
+  ULONG MembersCount;
+  ULONG Flags;
 } KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER;
 
 typedef struct {
-    KSPROPERTY_MEMBERSHEADER    MembersHeader;
-    const VOID*                 Members;
+  KSPROPERTY_MEMBERSHEADER MembersHeader;
+  const VOID *Members;
 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
 
-#define KSPROPERTY_MEMBER_RANGES            0x00000001
-#define KSPROPERTY_MEMBER_STEPPEDRANGES     0x00000002
-#define KSPROPERTY_MEMBER_VALUES            0x00000003
+#define KSPROPERTY_MEMBER_RANGES        0x00000001
+#define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
+#define KSPROPERTY_MEMBER_VALUES        0x00000003
 
-#define KSPROPERTY_MEMBER_FLAG_DEFAULT                      0x00000001
+#define KSPROPERTY_MEMBER_FLAG_DEFAULT                   0x00000001
 #if (NTDDI_VERSION >= NTDDI_WINXP)
-#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL    0x00000002
-#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM         0x00000004
+#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
+#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM      0x00000004
 #endif
 
-
 typedef struct {
-    KSIDENTIFIER                    PropTypeSet;
-    ULONG                           MembersListCount;
-    const KSPROPERTY_MEMBERSLIST*   MembersList;
+  KSIDENTIFIER PropTypeSet;
+  ULONG MembersListCount;
+  _Field_size_(MembersListCount) const KSPROPERTY_MEMBERSLIST *MembersList;
 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
 
 #if defined(_NTDDK_)
-typedef NTSTATUS (NTAPI *PFNKSHANDLER)(
-    IN  PIRP Irp,
-    IN  PKSIDENTIFIER Request,
-    IN  OUT PVOID Data);
 
-typedef struct 
-{
-    ULONG PropertyId;
-    union 
-    {
-        PFNKSHANDLER GetPropertyHandler;
-        BOOLEAN GetSupported;
-    };
-    ULONG MinProperty;
-    ULONG MinData;
-    union {
-        PFNKSHANDLER SetPropertyHandler;
-        BOOLEAN SetSupported;
-    };
-    const KSPROPERTY_VALUES * Values;
-    ULONG RelationsCount;
-    const KSPROPERTY * Relations;
-    PFNKSHANDLER SupportHandler;
-    ULONG SerializedSize;
-} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSCONTEXT_DISPATCH)(
+  _In_ PVOID Context,
+  _In_ PIRP Irp);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSHANDLER)(
+  _In_ PIRP Irp,
+  _In_ PKSIDENTIFIER Request,
+  _Inout_ PVOID Data);
 
-typedef
-BOOLEAN
+typedef struct {
+  ULONG PropertyId;
+  union {
+    PFNKSHANDLER GetPropertyHandler;
+    BOOLEAN GetSupported;
+  };
+  ULONG MinProperty;
+  ULONG MinData;
+  union {
+    PFNKSHANDLER SetPropertyHandler;
+    BOOLEAN SetSupported;
+  };
+  const KSPROPERTY_VALUES *Values;
+  ULONG RelationsCount;
+  _Field_size_(RelationsCount) const KSPROPERTY *Relations;
+  PFNKSHANDLER SupportHandler;
+  ULONG SerializedSize;
+} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef BOOLEAN
 (NTAPI *PFNKSFASTHANDLER)(
-    IN PFILE_OBJECT FileObject,
-    IN PKSIDENTIFIER Request,
-    IN ULONG RequestLength,
-    IN OUT PVOID Data,
-    IN ULONG DataLength,
-    OUT PIO_STATUS_BLOCK IoStatus
-    );
+  _In_ PFILE_OBJECT FileObject,
+  _In_reads_bytes_(RequestLength) PKSIDENTIFIER Request,
+  _In_ ULONG RequestLength,
+  _Inout_updates_bytes_(DataLength) PVOID Data,
+  _In_ ULONG DataLength,
+  _Out_ PIO_STATUS_BLOCK IoStatus);
 
 typedef struct {
-    ULONG                       PropertyId;
-    union {
-        PFNKSFASTHANDLER            GetPropertyHandler;
-        BOOLEAN                     GetSupported;
-    };
-    union {
-        PFNKSFASTHANDLER            SetPropertyHandler;
-        BOOLEAN                     SetSupported;
-    };
-    ULONG                       Reserved;
+  ULONG PropertyId;
+  union {
+    PFNKSFASTHANDLER GetPropertyHandler;
+    BOOLEAN GetSupported;
+  };
+  union {
+    PFNKSFASTHANDLER SetPropertyHandler;
+    BOOLEAN SetSupported;
+  };
+  ULONG Reserved;
 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
 
-typedef struct
-{
-    const GUID* Set;
-    ULONG PropertiesCount;
-    const KSPROPERTY_ITEM * PropertyItem;
-    ULONG FastIoCount;
-    const KSFASTPROPERTY_ITEM* FastIoTable;
+typedef struct {
+  const GUID *Set;
+  ULONG PropertiesCount;
+  _Field_size_(PropertiesCount) const KSPROPERTY_ITEM *PropertyItem;
+  ULONG FastIoCount;
+  const KSFASTPROPERTY_ITEM *FastIoTable;
 } KSPROPERTY_SET, *PKSPROPERTY_SET;
 
-#endif
+#endif /* _NTDDK_ */
 
-typedef struct
-{
-    ULONG                       SteppingDelta;
-    ULONG                       Reserved;
-    KSPROPERTY_BOUNDS_LONG      Bounds;
+typedef struct {
+  ULONG SteppingDelta;
+  ULONG Reserved;
+  KSPROPERTY_BOUNDS_LONG Bounds;
 } KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG;
 
-typedef struct
-{
+typedef struct {
 #if defined(_NTDDK_)
-    ULONGLONG                   SteppingDelta;
+  ULONGLONG SteppingDelta;
 #else
-    DWORDLONG                   SteppingDelta;
+  DWORDLONG SteppingDelta;
 #endif
-    KSPROPERTY_BOUNDS_LONGLONG  Bounds;
+  KSPROPERTY_BOUNDS_LONGLONG Bounds;
 } KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
 
 /* ===============================================================
     Allocator Framing
 */
 
-typedef struct
-{
-    union {
-        ULONG       OptionsFlags;
-        ULONG       RequirementsFlags;
-    };
+typedef struct {
+  union {
+    ULONG OptionsFlags;
+    ULONG RequirementsFlags;
+  };
 #if defined(_NTDDK_)
-    POOL_TYPE   PoolType;
+  POOL_TYPE PoolType;
 #else
-    ULONG       PoolType;
-#endif 
-    ULONG       Frames;
-    ULONG       FrameSize;
-    ULONG       FileAlignment;
-    ULONG       Reserved;
+  ULONG PoolType;
+#endif
+  ULONG Frames;
+  ULONG FrameSize;
+  ULONG FileAlignment;
+  ULONG Reserved;
 } KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
 
-typedef struct
-{
-    ULONG               CountItems;
-    ULONG               PinFlags;
-    KS_COMPRESSION      OutputCompression;
-    ULONG               PinWeight;
-    KS_FRAMING_ITEM     FramingItem[1]; 
+typedef struct {
+  ULONG CountItems;
+  ULONG PinFlags;
+  KS_COMPRESSION OutputCompression;
+  ULONG PinWeight;
+  KS_FRAMING_ITEM FramingItem[1];
 } KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
 
-#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER   0x00000001
-#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY      0x00000002
-#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY    0x00000004
-#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE      0x00000008
-#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY   0x80000000
+#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER  0x00000001
+#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY     0x00000002
+#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY   0x00000004
+#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE     0x00000008
+#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY  0x80000000
 
-#define KSALLOCATOR_OPTIONF_COMPATIBLE              0x00000001
-#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY           0x00000002
-#define KSALLOCATOR_OPTIONF_VALID                   0x00000003
+#define KSALLOCATOR_OPTIONF_COMPATIBLE             0x00000001
+#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY          0x00000002
+#define KSALLOCATOR_OPTIONF_VALID                  0x00000003
 
-#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT       0x00000010
-#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC            0x00000020
-#define KSALLOCATOR_FLAG_CAN_ALLOCATE               0x00000040
-#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO  0x00000080
+#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT      0x00000010
+#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC           0x00000020
+#define KSALLOCATOR_FLAG_CAN_ALLOCATE              0x00000040
+#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
 
 /* ===============================================================
     Quality
 */
 
-typedef struct
-{
-    PVOID       Context;
-    ULONG       Proportion;
-    LONGLONG    DeltaTime;
+typedef struct {
+  PVOID Context;
+  ULONG Proportion;
+  LONGLONG DeltaTime;
 } KSQUALITY, *PKSQUALITY;
 
-typedef struct
-{
-    HANDLE QualityManager;
-    PVOID Context;
+typedef struct {
+  HANDLE QualityManager;
+  PVOID Context;
 } KSQUALITY_MANAGER, *PKSQUALITY_MANAGER;
 
-typedef struct
-{
-    LONGLONG        PresentationStart;
-    LONGLONG        Duration;
-    KSPIN_INTERFACE Interface;
-    LONG            Rate;
-    ULONG           Flags;
+typedef struct {
+  LONGLONG PresentationStart;
+  LONGLONG Duration;
+  KSPIN_INTERFACE Interface;
+  LONG Rate;
+  ULONG Flags;
 } KSRATE, *PKSRATE;
 
-typedef struct
-{
-    KSPROPERTY      Property;
-    KSRATE          Rate;
+typedef struct {
+  KSPROPERTY Property;
+  KSRATE Rate;
 } KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
 
-typedef struct
-{
-    LONGLONG Granularity;
-    LONGLONG Error;
+typedef struct {
+  LONGLONG Granularity;
+  LONGLONG Error;
 } KSRESOLUTION, *PKSRESOLUTION;
 
-typedef struct
-{
-    ULONG       NotificationType;
-    union {
-        struct {
-            HANDLE              Event;
-            ULONG_PTR           Reserved[2];
-        } EventHandle;
-        struct {
-            HANDLE              Semaphore;
-            ULONG               Reserved;
-            LONG                Adjustment;
-        } SemaphoreHandle;
+typedef struct {
+  ULONG NotificationType;
+  union {
+    struct {
+      HANDLE Event;
+      ULONG_PTR Reserved[2];
+    } EventHandle;
+    struct {
+      HANDLE Semaphore;
+      ULONG Reserved;
+      LONG Adjustment;
+    } SemaphoreHandle;
 #if defined(_NTDDK_)
-        struct {
-            PVOID               Event;
-            KPRIORITY           Increment;
-            ULONG_PTR           Reserved;
-        } EventObject;
-        struct {
-            PVOID               Semaphore;
-            KPRIORITY           Increment;
-            LONG                Adjustment;
-        } SemaphoreObject;
-        struct {
-            PKDPC               Dpc;
-            ULONG               ReferenceCount;
-            ULONG_PTR           Reserved;
-        } Dpc;
-        struct {
-            PWORK_QUEUE_ITEM    WorkQueueItem;
-            WORK_QUEUE_TYPE     WorkQueueType;
-            ULONG_PTR           Reserved;
-        } WorkItem;
-        struct {
-            PWORK_QUEUE_ITEM    WorkQueueItem;
-            PKSWORKER           KsWorkerObject;
-            ULONG_PTR           Reserved;
-        } KsWorkItem;
+    struct {
+      PVOID Event;
+      KPRIORITY Increment;
+      ULONG_PTR Reserved;
+    } EventObject;
+    struct {
+      PVOID Semaphore;
+      KPRIORITY Increment;
+      LONG Adjustment;
+    } SemaphoreObject;
+    struct {
+      PKDPC Dpc;
+      ULONG ReferenceCount;
+      ULONG_PTR Reserved;
+    } Dpc;
+    struct {
+      PWORK_QUEUE_ITEM WorkQueueItem;
+      WORK_QUEUE_TYPE WorkQueueType;
+      ULONG_PTR Reserved;
+    } WorkItem;
+    struct {
+      PWORK_QUEUE_ITEM WorkQueueItem;
+      PKSWORKER KsWorkerObject;
+      ULONG_PTR Reserved;
+    } KsWorkItem;
 #endif
-        struct {
-            PVOID               Unused;
-            LONG_PTR            Alignment[2];
-        } Alignment;
-    };
+    struct {
+      PVOID Unused;
+      LONG_PTR Alignment[2];
+    } Alignment;
+  };
 } KSEVENTDATA, *PKSEVENTDATA;
 
 #define KSEVENTF_EVENT_HANDLE       0x00000001
@@ -1908,101 +1810,90 @@ typedef struct
 #define KSEVENT_TYPE_BASICSUPPORT   0x00000200
 #define KSEVENT_TYPE_QUERYBUFFER    0x00000400
 
-#define KSEVENT_TYPE_TOPOLOGY 0x10000000
+#define KSEVENT_TYPE_TOPOLOGY       0x10000000
 
-typedef struct
-{
-    ULONG Size;
-    ULONG Flags;
-    union {
-        HANDLE ObjectHandle;
-        PVOID ObjectPointer;
-    };
-    PVOID Reserved;
-    KSEVENT Event;
-    KSEVENTDATA EventData;
+typedef struct {
+  ULONG Size;
+  ULONG Flags;
+  union {
+    HANDLE ObjectHandle;
+    PVOID ObjectPointer;
+  };
+  PVOID Reserved;
+  KSEVENT Event;
+  KSEVENTDATA EventData;
 } KSRELATIVEEVENT, *PKSRELATIVEEVENT;
 
-#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
+#define KSRELATIVEEVENT_FLAG_HANDLE  0x00000001
 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
 
 /* ===============================================================
     Timing
 */
 
-
 typedef struct {
-    KSEVENTDATA     EventData;
-    LONGLONG        MarkTime;
+  KSEVENTDATA EventData;
+  LONGLONG MarkTime;
 } KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
 
 typedef struct {
-    KSEVENTDATA     EventData;
-    LONGLONG        TimeBase;
-    LONGLONG        Interval;
+  KSEVENTDATA EventData;
+  LONGLONG TimeBase;
+  LONGLONG Interval;
 } KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
 
 typedef struct {
-    LONGLONG        TimeBase;
-    LONGLONG        Interval;
+  LONGLONG TimeBase;
+  LONGLONG Interval;
 } KSINTERVAL, *PKSINTERVAL;
 
-
-
-typedef struct
-{
-    LONGLONG Time;
-    ULONG Numerator;
-    ULONG Denominator;
+typedef struct {
+  LONGLONG Time;
+  ULONG Numerator;
+  ULONG Denominator;
 } KSTIME, *PKSTIME;
 
-typedef struct
-{
-    LONGLONG    Time;
-    LONGLONG    SystemTime;
+typedef struct {
+  LONGLONG Time;
+  LONGLONG SystemTime;
 } KSCORRELATED_TIME, *PKSCORRELATED_TIME;
 
-typedef struct
-{
-    LONGLONG    Duration;
-    ULONG       FrameFlags;
-    ULONG       Reserved;
+typedef struct {
+  LONGLONG Duration;
+  ULONG FrameFlags;
+  ULONG Reserved;
 } KSFRAMETIME, *PKSFRAMETIME;
 
-
 /* ===============================================================
     Clocks
 */
 
-typedef PVOID   PKSDEFAULTCLOCK;
+typedef PVOID PKSDEFAULTCLOCK;
 
-typedef struct
-{
-    ULONG       CreateFlags;
+typedef struct {
+  ULONG CreateFlags;
 } KSCLOCK_CREATE, *PKSCLOCK_CREATE;
 
 #if defined(_NTDDK_)
 
-typedef
-LONGLONG
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef LONGLONG
 (FASTCALL *PFNKSCLOCK_GETTIME)(
-    IN PFILE_OBJECT FileObject
-    );
-typedef
-LONGLONG
+  _In_ PFILE_OBJECT FileObject);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef LONGLONG
 (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(
-    IN PFILE_OBJECT FileObject,
-    OUT PLONGLONG SystemTime);
+  _In_ PFILE_OBJECT FileObject,
+  _Out_ PLONGLONG SystemTime);
 
-typedef struct
-{
-    PFNKSCLOCK_GETTIME GetTime;
-    PFNKSCLOCK_GETTIME GetPhysicalTime;
-    PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
-    PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
+typedef struct {
+  PFNKSCLOCK_GETTIME GetTime;
+  PFNKSCLOCK_GETTIME GetPhysicalTime;
+  PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
+  PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
 
-
 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\
     DEFINE_KSPROPERTY_ITEM(\
         KSPROPERTY_CLOCK_TIME,\
@@ -2077,66 +1968,62 @@ DEFINE_KSPROPERTY_TABLE(ClockSet) {\
     Objects ??? SORT ME!
 */
 
-#define KSCREATE_ITEM_SECURITYCHANGED       0x1
-#define KSCREATE_ITEM_WILDCARD              0x2
-#define KSCREATE_ITEM_NOPARAMETERS          0x4
-#define KSCREATE_ITEM_FREEONSTOP            0x8
+#define KSCREATE_ITEM_SECURITYCHANGED 0x1
+#define KSCREATE_ITEM_WILDCARD        0x2
+#define KSCREATE_ITEM_NOPARAMETERS    0x4
+#define KSCREATE_ITEM_FREEONSTOP      0x8
 
-typedef struct
-{
-    PDRIVER_DISPATCH       Create;
-    PVOID                  Context;
-    UNICODE_STRING         ObjectClass;
-    PSECURITY_DESCRIPTOR   SecurityDescriptor;
-    ULONG                  Flags;
+typedef struct {
+  PDRIVER_DISPATCH Create;
+  PVOID Context;
+  UNICODE_STRING ObjectClass;
+  PSECURITY_DESCRIPTOR SecurityDescriptor;
+  ULONG Flags;
 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
 
-typedef struct
-{
-    ULONG                    CreateItemsCount;
-    PKSOBJECT_CREATE_ITEM    CreateItemsList;
+typedef struct {
+  ULONG CreateItemsCount;
+  _Field_size_(CreateItemsCount) PKSOBJECT_CREATE_ITEM CreateItemsList;
 } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
 
-typedef VOID (NTAPI *PFNKSITEMFREECALLBACK)(
-    IN  PKSOBJECT_CREATE_ITEM CreateItem);
+typedef VOID
+(NTAPI *PFNKSITEMFREECALLBACK)(
+  _In_ PKSOBJECT_CREATE_ITEM CreateItem);
 
-#endif
+#endif /* _NTDDK_ */
 
-typedef struct
-{
-    ULONG    Size;
-    ULONG    Count;
+typedef struct {
+  ULONG Size;
+  ULONG Count;
 } KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM;
 
-typedef struct
-{
-    KSEVENT         Event;
-    PKSEVENTDATA    EventData;
-    PVOID           Reserved;
+typedef struct {
+  KSEVENT Event;
+  PKSEVENTDATA EventData;
+  PVOID Reserved;
 } KSQUERYBUFFER, *PKSQUERYBUFFER;
 
-typedef struct
-{
-    PVOID       Context;
-    ULONG       Status;
+typedef struct {
+  PVOID Context;
+  ULONG Status;
 } KSERROR, *PKSERROR;
 
 /* ===============================================================
     Methods
 */
+
 #if defined(_NTDDK_)
 
-typedef struct
-{
-    ULONG                   MethodId;
-    union {
-        PFNKSHANDLER            MethodHandler;
-        BOOLEAN                 MethodSupported;
-    };
-    ULONG                   MinMethod;
-    ULONG                   MinData;
-    PFNKSHANDLER            SupportHandler;
-    ULONG                   Flags;
+typedef struct {
+  ULONG MethodId;
+  union {
+    PFNKSHANDLER MethodHandler;
+    BOOLEAN MethodSupported;
+  };
+  ULONG MinMethod;
+  ULONG MinData;
+  PFNKSHANDLER SupportHandler;
+  ULONG Flags;
 } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
 
 #ifndef _MSC_VER
@@ -2159,18 +2046,14 @@ typedef struct
     SupportHandler, Flags\
 }
 
-
-
 #endif
 
-
-typedef struct
-{
-    ULONG                   MethodId;
-    union {
-        PFNKSFASTHANDLER        MethodHandler;
-        BOOLEAN                 MethodSupported;
-    };
+typedef struct {
+  ULONG MethodId;
+  union {
+    PFNKSFASTHANDLER MethodHandler;
+    BOOLEAN MethodSupported;
+  };
 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
 
 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
@@ -2178,17 +2061,14 @@ typedef struct
     MethodId, (PFNKSFASTHANDLER)MethodHandler\
 }
 
-       
-typedef struct
-{
-    const GUID*             Set;
-    ULONG                   MethodsCount;
-    const KSMETHOD_ITEM*    MethodItem;
-    ULONG                   FastIoCount;
-    const KSFASTMETHOD_ITEM*FastIoTable;
+typedef struct {
+  const GUID *Set;
+  ULONG MethodsCount;
+  _Field_size_(MethodsCount) const KSMETHOD_ITEM *MethodItem;
+  ULONG FastIoCount;
+  _Field_size_(FastIoCount) const KSFASTMETHOD_ITEM *FastIoTable;
 } KSMETHOD_SET, *PKSMETHOD_SET;
 
-
 #define DEFINE_KSMETHOD_SET(Set,\
                             MethodsCount,\
                             MethodItem,\
@@ -2202,93 +2082,88 @@ typedef struct
     FastIoTable\
 }
 
-#endif
+#endif /* _NTDDK_ */
+
 /* ===============================================================
     Nodes
 */
 
-typedef struct
-{
-    KSPROPERTY      Property;
-    ULONG           NodeId;
-    ULONG           Reserved;
+typedef struct {
+  KSPROPERTY Property;
+  ULONG NodeId;
+  ULONG Reserved;
 } KSP_NODE, *PKSP_NODE;
 
-typedef struct
-{
-    KSMETHOD Method;
-    ULONG NodeID;
-    ULONG Reserved;
+typedef struct {
+  KSMETHOD Method;
+  ULONG NodeID;
+  ULONG Reserved;
 } KSM_NODE, *PKSM_NODE;
 
-typedef struct
-{
-    KSEVENT         Event;
-    ULONG           NodeId;
-    ULONG           Reserved;
+typedef struct {
+  KSEVENT Event;
+  ULONG NodeId;
+  ULONG Reserved;
 } KSE_NODE, *PKSE_NODE;
 
 typedef struct {
-    ULONG       CreateFlags;
-    ULONG       Node;
+  ULONG CreateFlags;
+  ULONG Node;
 } KSNODE_CREATE, *PKSNODE_CREATE;
 
-
 /* ===============================================================
     Events
 */
+
 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY;
 
 #if defined(_NTDDK_)
-       
-typedef NTSTATUS (NTAPI *PFNKSADDEVENT)(
-    IN  PIRP Irp,
-    IN  PKSEVENTDATA EventData,
-    IN  struct _KSEVENT_ENTRY* EventEntry);
 
-typedef
-VOID
+typedef NTSTATUS
+(NTAPI *PFNKSADDEVENT)(
+  _In_ PIRP Irp,
+  _In_ PKSEVENTDATA EventData,
+  _In_ struct _KSEVENT_ENTRY *EventEntry);
+
+typedef VOID
 (NTAPI *PFNKSREMOVEEVENT)(
-    IN PFILE_OBJECT FileObject,
-    IN struct _KSEVENT_ENTRY* EventEntry
-    );
+  _In_ PFILE_OBJECT FileObject,
+  _In_ struct _KSEVENT_ENTRY *EventEntry);
 
-typedef struct
-{
-    ULONG               EventId;
-    ULONG               DataInput;
-    ULONG               ExtraEntryData;
-    PFNKSADDEVENT       AddHandler;
-    PFNKSREMOVEEVENT    RemoveHandler;
-    PFNKSHANDLER        SupportHandler;
+typedef struct {
+  ULONG EventId;
+  ULONG DataInput;
+  ULONG ExtraEntryData;
+  PFNKSADDEVENT AddHandler;
+  PFNKSREMOVEEVENT RemoveHandler;
+  PFNKSHANDLER SupportHandler;
 } KSEVENT_ITEM, *PKSEVENT_ITEM;
 
-typedef struct
-{
-    const GUID*         Set;
-    ULONG               EventsCount;
-    const KSEVENT_ITEM* EventItem;
+typedef struct {
+  const GUID *Set;
+  ULONG EventsCount;
+  _Field_size_(EventsCount) const KSEVENT_ITEM *EventItem;
 } KSEVENT_SET, *PKSEVENT_SET;
 
-struct _KSEVENT_ENTRY
-{
-    LIST_ENTRY      ListEntry;
-    PVOID           Object;
-    union {
-        PKSDPC_ITEM         DpcItem;
-        PKSBUFFER_ITEM      BufferItem;
-    };
-    PKSEVENTDATA        EventData;
-    ULONG               NotificationType;
-    const KSEVENT_SET*  EventSet;
-    const KSEVENT_ITEM* EventItem;
-    PFILE_OBJECT        FileObject;
-    ULONG               SemaphoreAdjustment;
-    ULONG               Reserved;
-    ULONG               Flags;
+struct _KSEVENT_ENTRY {
+  LIST_ENTRY ListEntry;
+  PVOID Object;
+  union {
+    PKSDPC_ITEM DpcItem;
+    PKSBUFFER_ITEM BufferItem;
+  };
+  PKSEVENTDATA EventData;
+  ULONG NotificationType;
+  const KSEVENT_SET *EventSet;
+  const KSEVENT_ITEM *EventItem;
+  PFILE_OBJECT FileObject;
+  ULONG SemaphoreAdjustment;
+  ULONG Reserved;
+  ULONG Flags;
 };
 
-#endif
+#endif /* _NTDDK_ */
+
 /* ===============================================================
     Pins
 */
@@ -2304,297 +2179,278 @@ typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
 #define IOCTL_KS_HANDSHAKE             CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
 
 typedef struct {
-    GUID ProtocolId;
-    PVOID Argument1;
-    PVOID Argument2;
+  GUID ProtocolId;
+  PVOID Argument1;
+  PVOID Argument2;
 } KSHANDSHAKE, *PKSHANDSHAKE;
 
-typedef
-NTSTATUS
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSPINHANDSHAKE)(
-    IN PKSPIN Pin,
-    IN PKSHANDSHAKE In,
-    IN PKSHANDSHAKE Out
-    );
+  _In_ PKSPIN Pin,
+  _In_ PKSHANDSHAKE In,
+  _In_ PKSHANDSHAKE Out);
 
-typedef
-void
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef void
 (NTAPI *PFNKSPINPOWER)(
-    IN PKSPIN Pin,
-    IN DEVICE_POWER_STATE State
-    );
+  _In_ PKSPIN Pin,
+  _In_ DEVICE_POWER_STATE State);
 
-typedef
-void
+typedef void
 (NTAPI *PFNKSPINFRAMERETURN)(
-    IN PKSPIN Pin,
-    IN PVOID Data OPTIONAL,
-    IN ULONG Size OPTIONAL,
-    IN PMDL Mdl OPTIONAL,
-    IN PVOID Context OPTIONAL,
-    IN NTSTATUS Status
-    );
-
-typedef
-void
+  _In_ PKSPIN Pin,
+  _In_reads_bytes_opt_(Size) PVOID Data,
+  _In_opt_ ULONG Size,
+  _In_opt_ PMDL Mdl,
+  _In_opt_ PVOID Context,
+  _In_ NTSTATUS Status);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef void
 (NTAPI *PFNKSPINIRPCOMPLETION)(
-    IN PKSPIN Pin,
-    IN PIRP Irp
-    );
+  _In_ PKSPIN Pin,
+  _In_ PIRP Irp);
 
-typedef
-NTSTATUS
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSPINIRP)(
-    IN PKSPIN Pin,
-    IN PIRP Irp
-    );
+  _In_ PKSPIN Pin,
+  _In_ PIRP Irp);
 
-typedef
-NTSTATUS
+typedef NTSTATUS
 (NTAPI *PFNKSPIN)(
-    IN PKSPIN Pin
-    );
+  _In_ PKSPIN Pin);
 
-typedef
-void
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef void
 (NTAPI *PFNKSPINVOID)(
-    IN PKSPIN Pin
-    );
+  _In_ PKSPIN Pin);
 
-typedef
-void
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef void
 (NTAPI *PFNKSSTREAMPOINTER)(
-    IN PKSSTREAM_POINTER StreamPointer
-    );
+  _In_ PKSSTREAM_POINTER StreamPointer);
 
 typedef struct {
-    ULONG Count;
-    PKSATTRIBUTE* Attributes;
+  ULONG Count;
+  _Field_size_(Count) PKSATTRIBUTE *Attributes;
 } KSATTRIBUTE_LIST, *PKSATTRIBUTE_LIST;
 
-typedef
-NTSTATUS
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSPINSETDATAFORMAT)(
-    IN PKSPIN Pin,
-    IN PKSDATAFORMAT OldFormat OPTIONAL,
-    IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL,
-    IN const KSDATARANGE* DataRange,
-    IN const KSATTRIBUTE_LIST* AttributeRange OPTIONAL
-    );
-
-typedef
-NTSTATUS
+  _In_ PKSPIN Pin,
+  _In_opt_ PKSDATAFORMAT OldFormat,
+  _In_opt_ PKSMULTIPLE_ITEM OldAttributeList,
+  _In_ const KSDATARANGE* DataRange,
+  _In_opt_ const KSATTRIBUTE_LIST* AttributeRange);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSPINSETDEVICESTATE)(
-    IN PKSPIN Pin,
-    IN KSSTATE ToState,
-    IN KSSTATE FromState
-    );
+  _In_ PKSPIN Pin,
+  _In_ KSSTATE ToState,
+  _In_ KSSTATE FromState);
 
 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
 
-typedef struct
-{
-    PFNKSPINIRP Create;
-    PFNKSPINIRP Close;
-    PFNKSPIN Process;
-    PFNKSPINVOID Reset;
-    PFNKSPINSETDATAFORMAT SetDataFormat;
-    PFNKSPINSETDEVICESTATE SetDeviceState;
-    PFNKSPIN Connect;
-    PFNKSPINVOID Disconnect;
-    const KSCLOCK_DISPATCH* Clock;
-    const KSALLOCATOR_DISPATCH* Allocator;
+typedef struct {
+  PFNKSPINIRP Create;
+  PFNKSPINIRP Close;
+  PFNKSPIN Process;
+  PFNKSPINVOID Reset;
+  PFNKSPINSETDATAFORMAT SetDataFormat;
+  PFNKSPINSETDEVICESTATE SetDeviceState;
+  PFNKSPIN Connect;
+  PFNKSPINVOID Disconnect;
+  const KSCLOCK_DISPATCH* Clock;
+  const KSALLOCATOR_DISPATCH* Allocator;
 } KSPIN_DISPATCH, *PKSPIN_DISPATCH;
 
-typedef
-BOOLEAN
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef BOOLEAN
 (NTAPI *PFNKSPINSETTIMER)(
-    IN PKSPIN Pin,
-    IN PKTIMER Timer,
-    IN LARGE_INTEGER DueTime,
-    IN PKDPC Dpc
-    );
+  _In_ PKSPIN Pin,
+  _In_ PKTIMER Timer,
+  _In_ LARGE_INTEGER DueTime,
+  _In_ PKDPC Dpc);
 
-typedef
-BOOLEAN
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef BOOLEAN
 (NTAPI *PFNKSPINCANCELTIMER)(
-    IN PKSPIN Pin,
-    IN PKTIMER Timer
-    );
+  _In_ PKSPIN Pin,
+  _In_ PKTIMER Timer);
 
-typedef
-LONGLONG
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef LONGLONG
 (FASTCALL *PFNKSPINCORRELATEDTIME)(
-    IN PKSPIN Pin,
-    OUT PLONGLONG SystemTime
-    );
+  _In_ PKSPIN Pin,
+  _Out_ PLONGLONG SystemTime);
 
-typedef
-void
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef void
 (NTAPI *PFNKSPINRESOLUTION)(
-    IN PKSPIN Pin,
-    OUT PKSRESOLUTION Resolution
-    );
+  _In_ PKSPIN Pin,
+  _Out_ PKSRESOLUTION Resolution);
 
 struct _KSCLOCK_DISPATCH {
-    PFNKSPINSETTIMER SetTimer;
-    PFNKSPINCANCELTIMER CancelTimer;
-    PFNKSPINCORRELATEDTIME CorrelatedTime;
-    PFNKSPINRESOLUTION Resolution;
+  PFNKSPINSETTIMER SetTimer;
+  PFNKSPINCANCELTIMER CancelTimer;
+  PFNKSPINCORRELATEDTIME CorrelatedTime;
+  PFNKSPINRESOLUTION Resolution;
 };
 
-typedef
-NTSTATUS
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSPININITIALIZEALLOCATOR)(
-    IN PKSPIN Pin,
-    IN PKSALLOCATOR_FRAMING AllocatorFraming,
-    OUT PVOID* Context
-    );
+  _In_ PKSPIN Pin,
+  _In_ PKSALLOCATOR_FRAMING AllocatorFraming,
+  _Out_ PVOID *Context);
 
-typedef PVOID (NTAPI *PFNKSDELETEALLOCATOR)(
-    IN  PVOID Context);
+typedef PVOID
+(NTAPI *PFNKSDELETEALLOCATOR)(
+  _In_ PVOID Context);
 
-typedef PVOID (NTAPI *PFNKSDEFAULTALLOCATE)(
-    IN  PVOID Context);
+typedef PVOID
+(NTAPI *PFNKSDEFAULTALLOCATE)(
+  _In_ PVOID Context);
 
-typedef PVOID (NTAPI *PFNKSDEFAULTFREE)(
-    IN  PVOID Context,
-    IN  PVOID Buffer);
+typedef PVOID
+(NTAPI *PFNKSDEFAULTFREE)(
+  _In_ PVOID Context,
+  _In_ PVOID Buffer);
 
 struct _KSALLOCATOR_DISPATCH {
-    PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
-    PFNKSDELETEALLOCATOR DeleteAllocator;
-    PFNKSDEFAULTALLOCATE Allocate;
-    PFNKSDEFAULTFREE Free;
+  PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
+  PFNKSDELETEALLOCATOR DeleteAllocator;
+  PFNKSDEFAULTALLOCATE Allocate;
+  PFNKSDEFAULTFREE Free;
 };
 
-typedef struct
-{
-    ULONG PropertySetsCount;
-    ULONG PropertyItemSize;
-    const KSPROPERTY_SET* PropertySets;
-    ULONG MethodSetsCount;
-    ULONG MethodItemSize;
-    const KSMETHOD_SET* MethodSets;
-    ULONG EventSetsCount;
-    ULONG EventItemSize;
-    const KSEVENT_SET* EventSets;
+typedef struct KSAUTOMATION_TABLE_ {
+  ULONG PropertySetsCount;
+  ULONG PropertyItemSize;
+  _Field_size_bytes_(PropertySetsCount * PropertyItemSize) const KSPROPERTY_SET *PropertySets;
+  ULONG MethodSetsCount;
+  ULONG MethodItemSize;
+  _Field_size_bytes_(MethodSetsCount * MethodItemSize) const KSMETHOD_SET *MethodSets;
+  ULONG EventSetsCount;
+  ULONG EventItemSize;
+  _Field_size_bytes_(EventSetsCount * EventItemSize) const KSEVENT_SET *EventSets;
 #if !defined(_WIN64)
-    PVOID Alignment;
+  PVOID Alignment;
 #endif
 } KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE;
 
-
-
-typedef struct
-{
-    ULONG                   InterfacesCount;
-    const KSPIN_INTERFACE*  Interfaces;
-    ULONG                   MediumsCount;
-    const KSPIN_MEDIUM*     Mediums;
-    ULONG                   DataRangesCount;
-    const PKSDATARANGE*     DataRanges;
-    KSPIN_DATAFLOW          DataFlow;
-    KSPIN_COMMUNICATION     Communication;
-    const GUID*             Category;
-    const GUID*             Name;
-    union {
-        LONGLONG            Reserved;
-        struct {
-            ULONG           ConstrainedDataRangesCount;
-            PKSDATARANGE*   ConstrainedDataRanges;
-        };
+typedef struct {
+  ULONG InterfacesCount;
+  _Field_size_(InterfacesCount) const KSPIN_INTERFACE *Interfaces;
+  ULONG MediumsCount;
+  _Field_size_(MediumsCount) const KSPIN_MEDIUM *Mediums;
+  ULONG DataRangesCount;
+  _Field_size_(DataRangesCount) const PKSDATARANGE *DataRanges;
+  KSPIN_DATAFLOW DataFlow;
+  KSPIN_COMMUNICATION Communication;
+  const GUID *Category;
+  const GUID *Name;
+  union {
+    LONGLONG Reserved;
+    struct {
+      ULONG ConstrainedDataRangesCount;
+      _Field_size_(ConstrainedDataRangesCount) PKSDATARANGE *ConstrainedDataRanges;
     };
+  };
 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
 
-typedef
-NTSTATUS
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSINTERSECTHANDLER)(
-    IN PIRP Irp,
-    IN PKSP_PIN Pin,
-    IN PKSDATARANGE DataRange,
-    OUT PVOID Data OPTIONAL
-    );
-
-typedef
-NTSTATUS
+  _In_ PIRP Irp,
+  _In_ PKSP_PIN Pin,
+  _In_ PKSDATARANGE DataRange,
+  _Out_opt_ PVOID Data);
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
 (NTAPI *PFNKSINTERSECTHANDLEREX)(
-    IN PVOID Context,
-    IN PIRP Irp,
-    IN PKSP_PIN Pin,
-    IN PKSDATARANGE DataRange,
-    IN PKSDATARANGE MatchingDataRange,
-    IN ULONG DataBufferSize,
-    OUT PVOID Data OPTIONAL,
-    OUT PULONG DataSize
-    );
-
-typedef struct
-{
-    const KSPIN_DISPATCH* Dispatch;
-    const KSAUTOMATION_TABLE* AutomationTable;
-    KSPIN_DESCRIPTOR PinDescriptor;
-    ULONG Flags;
-    ULONG InstancesPossible;
-    ULONG InstancesNecessary;
-    const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
-    PFNKSINTERSECTHANDLEREX IntersectHandler;
+  _In_ PVOID Context,
+  _In_ PIRP Irp,
+  _In_ PKSP_PIN Pin,
+  _In_ PKSDATARANGE DataRange,
+  _In_ PKSDATARANGE MatchingDataRange,
+  _In_ ULONG DataBufferSize,
+  _Out_writes_bytes_to_opt_(DataBufferSize, *DataSize) PVOID Data,
+  _Out_ PULONG DataSize);
+
+typedef struct {
+  const KSPIN_DISPATCH* Dispatch;
+  const KSAUTOMATION_TABLE* AutomationTable;
+  KSPIN_DESCRIPTOR PinDescriptor;
+  ULONG Flags;
+  ULONG InstancesPossible;
+  ULONG InstancesNecessary;
+  const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
+  PFNKSINTERSECTHANDLEREX IntersectHandler;
 } KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
 
-#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
-#define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
-#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
+#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING   0x00000001
+#define KSFILTER_FLAG_CRITICAL_PROCESSING         0x00000002
+#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING    0x00000004
 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
-#define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
+#define KSFILTER_FLAG_DENY_USERMODE_ACCESS        0x80000000
 #endif
 
-
 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
-#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
-#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
+
+#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING              0x00000008
+#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING           0x00000010
 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
-#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
-#define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
+#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING   0x00000040
+#define KSPIN_FLAG_ENFORCE_FIFO                         0x00000080
 
-#define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
+#define KSPIN_FLAG_GENERATE_MAPPINGS      0x00000100
 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
 
-#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
-#define KSPIN_FLAG_SPLITTER 0x00020000
-#define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
+#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY     0x00010000
+#define KSPIN_FLAG_SPLITTER                      0x00020000
+#define KSPIN_FLAG_USE_STANDARD_TRANSPORT        0x00040000
 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
-#define KSPIN_FLAG_FIXED_FORMAT 0x00100000
-#define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
+#define KSPIN_FLAG_FIXED_FORMAT                  0x00100000
+#define KSPIN_FLAG_GENERATE_EOS_EVENTS           0x00200000
+
 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
-#define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
+
+#define KSPIN_FLAG_IMPLEMENT_CLOCK                     0x00400000
 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
-#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
+#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE         0x01000000
 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
-#define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
+#define KSPIN_FLAG_DENY_USERMODE_ACCESS                0x80000000
 #endif
 
-struct _KSPIN
-{
-    const KSPIN_DESCRIPTOR_EX* Descriptor;
-    KSOBJECT_BAG Bag;
-    PVOID Context;
-    ULONG Id;
-    KSPIN_COMMUNICATION Communication;
-    BOOLEAN ConnectionIsExternal;
-    KSPIN_INTERFACE ConnectionInterface;
-    KSPIN_MEDIUM ConnectionMedium;
-    KSPRIORITY ConnectionPriority;
-    PKSDATAFORMAT ConnectionFormat;
-    PKSMULTIPLE_ITEM AttributeList;
-    ULONG StreamHeaderSize;
-    KSPIN_DATAFLOW DataFlow;
-    KSSTATE DeviceState;
-    KSRESET ResetState;
-    KSSTATE ClientState;
+struct _KSPIN {
+  const KSPIN_DESCRIPTOR_EX *Descriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
+  ULONG Id;
+  KSPIN_COMMUNICATION Communication;
+  BOOLEAN ConnectionIsExternal;
+  KSPIN_INTERFACE ConnectionInterface;
+  KSPIN_MEDIUM ConnectionMedium;
+  KSPRIORITY ConnectionPriority;
+  PKSDATAFORMAT ConnectionFormat;
+  PKSMULTIPLE_ITEM AttributeList;
+  ULONG StreamHeaderSize;
+  KSPIN_DATAFLOW DataFlow;
+  KSSTATE DeviceState;
+  KSRESET ResetState;
+  KSSTATE ClientState;
 };
 
 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
@@ -2748,52 +2604,43 @@ DEFINE_KSPROPERTY_TABLE(PinSet) {\
     DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
 }
 
-
-
-typedef
-void
+typedef void
 (NTAPI *PFNKSFREE)(
-    IN PVOID Data
-    );
+  _In_ PVOID Data);
 
+#define DEFINE_KSPROPERTY_TABLE(tablename) \
+  const KSPROPERTY_ITEM tablename[] =
 
+#endif /* _NTDDK_ */
 
-#define DEFINE_KSPROPERTY_TABLE(tablename)\
-    const KSPROPERTY_ITEM tablename[] =
-
-#endif
-
-typedef struct
-{
-    KSPIN_INTERFACE Interface;
-    KSPIN_MEDIUM Medium;
-    ULONG PinId;
-    HANDLE PinToHandle;
-    KSPRIORITY Priority;
+typedef struct {
+  KSPIN_INTERFACE Interface;
+  KSPIN_MEDIUM Medium;
+  ULONG PinId;
+  HANDLE PinToHandle;
+  KSPRIORITY Priority;
 } KSPIN_CONNECT, *PKSPIN_CONNECT;
 
 /* ===============================================================
     Topology
 */
 
-typedef struct
-{
-    ULONG FromNode;
-    ULONG FromNodePin;
-    ULONG ToNode;
-    ULONG ToNodePin;
+typedef struct {
+  ULONG FromNode;
+  ULONG FromNodePin;
+  ULONG ToNode;
+  ULONG ToNodePin;
 } KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION;
 
-typedef struct
-{
-    ULONG CategoriesCount;
-    const GUID* Categories;
-    ULONG TopologyNodesCount;
-    const GUID* TopologyNodes;
-    ULONG TopologyConnectionsCount;
-    const KSTOPOLOGY_CONNECTION* TopologyConnections;
-    const GUID* TopologyNodesNames;
-    ULONG Reserved;
+typedef struct {
+  ULONG CategoriesCount;
+  _Field_size_(CategoriesCount) const GUID *Categories;
+  ULONG TopologyNodesCount;
+  _Field_size_(TopologyNodesCount) const GUID *TopologyNodes;
+  ULONG TopologyConnectionsCount;
+  _Field_size_(TopologyConnectionsCount) const KSTOPOLOGY_CONNECTION *TopologyConnections;
+  _Field_size_(TopologyNodesCount) const GUID *TopologyNodesNames;
+  ULONG Reserved;
 } KSTOPOLOGY, *PKSTOPOLOGY;
 
 
@@ -2844,75 +2691,74 @@ DEFINE_KSPROPERTY_TABLE(TopologySet) {\
 /* TODO */
 typedef void* UNKNOWN;
 
-typedef PVOID (NTAPI *PFNKSINITIALIZEALLOCATOR)(
-    IN  PVOID InitialContext,
-    IN  PKSALLOCATOR_FRAMING AllocatorFraming,
-    OUT PVOID* Context);
+typedef PVOID
+(NTAPI *PFNKSINITIALIZEALLOCATOR)(
+  _In_ PVOID InitialContext,
+  _In_ PKSALLOCATOR_FRAMING AllocatorFraming,
+  _Outptr_ PVOID *Context);
 
 #if defined(_NTDDK_)
-typedef NTSTATUS (NTAPI *PFNKSALLOCATOR)(
-    IN  PIRP Irp,
-    IN  ULONG BufferSize,
-    IN  BOOLEAN InputOperation);
-
-typedef NTSTATUS (NTAPI *PFNKINTERSECTHANDLEREX)(
-    IN  PVOID Context,
-    IN  PIRP Irp,
-    IN  PKSP_PIN Pin,
-    IN  PKSDATARANGE DataRange,
-    IN  PKSDATARANGE MatchingDataRange,
-    IN  ULONG DataBufferSize,
-    OUT PVOID Data OPTIONAL,
-    OUT PULONG DataSize);
-
-
-typedef
-NTSTATUS
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSALLOCATOR)(
+  _In_ PIRP Irp,
+  _In_ ULONG BufferSize,
+  _In_ BOOLEAN InputOperation);
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKINTERSECTHANDLEREX)(
+  _In_ PVOID Context,
+  _In_ PIRP Irp,
+  _In_ PKSP_PIN Pin,
+  _In_ PKSDATARANGE DataRange,
+  _In_ PKSDATARANGE MatchingDataRange,
+  _In_ ULONG DataBufferSize,
+  _Out_writes_bytes_to_opt_(DataBufferSize, *DataSize) PVOID Data,
+  _Out_ PULONG DataSize);
+
+typedef NTSTATUS
 (NTAPI *PFNALLOCATOR_ALLOCATEFRAME)(
-    IN PFILE_OBJECT FileObject,
-    PVOID *Frame
-    );
+  _In_ PFILE_OBJECT FileObject,
+  _Outptr_ PVOID *Frame);
 
-typedef
-VOID
+typedef VOID
 (NTAPI *PFNALLOCATOR_FREEFRAME)(
-    IN PFILE_OBJECT FileObject,
-    IN PVOID Frame
-    );
+  _In_ PFILE_OBJECT FileObject,
+  _In_ PVOID Frame);
 
 typedef struct {
     PFNALLOCATOR_ALLOCATEFRAME  AllocateFrame;
     PFNALLOCATOR_FREEFRAME      FreeFrame;
 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
 
-#endif
+#endif /* _NTDDK_ */
 
-typedef struct
-{
-    KSALLOCATOR_FRAMING Framing;
-    ULONG AllocatedFrames;
-    ULONG Reserved;
+typedef struct {
+  KSALLOCATOR_FRAMING Framing;
+  ULONG AllocatedFrames;
+  ULONG Reserved;
 } KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
 
-typedef struct
-{
-    KSALLOCATOR_FRAMING_EX Framing;
-    ULONG AllocatedFrames;
-    ULONG Reserved;
+typedef struct {
+  KSALLOCATOR_FRAMING_EX Framing;
+  ULONG AllocatedFrames;
+  ULONG Reserved;
 } KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
 
-typedef struct
-{
-    ULONG Size;
-    ULONG TypeSpecificFlags;
-    KSTIME PresentationTime;
-    LONGLONG Duration;
-    ULONG FrameExtent;
-    ULONG DataUsed;
-    PVOID Data;
-    ULONG OptionsFlags;
+typedef struct {
+  ULONG Size;
+  ULONG TypeSpecificFlags;
+  KSTIME PresentationTime;
+  LONGLONG Duration;
+  ULONG FrameExtent;
+  ULONG DataUsed;
+  PVOID Data;
+  ULONG OptionsFlags;
 #ifdef _WIN64
-  ULONG  Reserved;
+  ULONG Reserved;
 #endif
 } KSSTREAM_HEADER, *PKSSTREAM_HEADER;
 
@@ -2932,22 +2778,24 @@ typedef struct
 /* ===============================================================
     XP / DX8
 */
+
 #if defined(_NTDDK_)
 
 typedef struct _KSGATE KSGATE, *PKSGATE;
 
 struct _KSGATE {
-    LONG Count;
-    PKSGATE NextGate;
+  LONG Count;
+  PKSGATE NextGate;
 };
 
 #ifndef _NTOS_
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateTurnInputOn(
-    IN PKSGATE Gate OPTIONAL)
+    _In_opt_ PKSGATE Gate)
 {
     while (Gate && (InterlockedIncrement(&Gate->Count) == 1))
     {
@@ -2955,11 +2803,12 @@ KsGateTurnInputOn(
     }
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateTurnInputOff(
-    IN PKSGATE Gate OPTIONAL)
+    _In_opt_ PKSGATE Gate)
 {
     while (Gate && (InterlockedDecrement(&Gate->Count) == 0))
     {
@@ -2967,21 +2816,23 @@ KsGateTurnInputOff(
     }
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 BOOLEAN
 __inline
 KsGateGetStateUnsafe(
-    IN PKSGATE Gate)
+    _In_ PKSGATE Gate)
 {
     ASSERT(Gate);
     return((BOOLEAN)(Gate->Count > 0));
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 BOOLEAN
 __inline
 KsGateCaptureThreshold(
-    IN PKSGATE Gate)
+    _In_ PKSGATE Gate)
 {
     BOOLEAN captured;
 
@@ -2997,15 +2848,15 @@ KsGateCaptureThreshold(
     return captured;
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateInitialize(
-    IN PKSGATE Gate,
-    IN LONG InitialCount,
-    IN PKSGATE NextGate OPTIONAL,
-    IN BOOLEAN StateToPropagate
-    )
+    _In_ PKSGATE Gate,
+    _In_ LONG InitialCount,
+    _In_opt_ PKSGATE NextGate,
+    _In_ BOOLEAN StateToPropagate)
 {
     ASSERT(Gate);
     Gate->Count = InitialCount;
@@ -3030,103 +2881,114 @@ KsGateInitialize(
     }
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateInitializeAnd(
-    IN PKSGATE AndGate,
-    IN PKSGATE NextOrGate OPTIONAL)
+    _In_ PKSGATE AndGate,
+    _In_opt_ PKSGATE NextOrGate)
 {
     KsGateInitialize(AndGate,1,NextOrGate,TRUE);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateInitializeOr(
-    IN PKSGATE OrGate,
-    IN PKSGATE NextAndGate OPTIONAL)
+    _In_ PKSGATE OrGate,
+    _In_opt_ PKSGATE NextAndGate)
 {
     KsGateInitialize(OrGate,0,NextAndGate,FALSE);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateAddOnInputToAnd(
-    IN PKSGATE AndGate)
+    _In_ PKSGATE AndGate)
 {
     UNREFERENCED_PARAMETER (AndGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateAddOffInputToAnd(
-    IN PKSGATE AndGate)
+    _In_ PKSGATE AndGate)
 {
     KsGateTurnInputOff(AndGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateRemoveOnInputFromAnd(
-    IN PKSGATE AndGate)
+    _In_ PKSGATE AndGate)
 {
     UNREFERENCED_PARAMETER (AndGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateRemoveOffInputFromAnd(
-    IN PKSGATE AndGate)
+    _In_ PKSGATE AndGate)
 {
     KsGateTurnInputOn(AndGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateAddOnInputToOr(
-    IN PKSGATE OrGate)
+    _In_ PKSGATE OrGate)
 {
     KsGateTurnInputOn(OrGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateAddOffInputToOr(
-    IN PKSGATE OrGate)
+    _In_ PKSGATE OrGate)
 {
     UNREFERENCED_PARAMETER (OrGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateRemoveOnInputFromOr(
-    IN PKSGATE OrGate) 
+    _In_ PKSGATE OrGate)
 {
     KsGateTurnInputOff(OrGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateRemoveOffInputFromOr(
-    IN PKSGATE OrGate)
+    _In_ PKSGATE OrGate)
 {
     UNREFERENCED_PARAMETER (OrGate);
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateTerminateAnd(
-    IN PKSGATE AndGate)
+    _In_ PKSGATE AndGate)
 {
     ASSERT(AndGate);
     if (KsGateGetStateUnsafe(AndGate))
@@ -3139,11 +3001,12 @@ KsGateTerminateAnd(
     }
 }
 
+_IRQL_requires_max_(HIGH_LEVEL)
 static
 void
 __inline
 KsGateTerminateOr(
-    IN PKSGATE OrGate)
+    _In_ PKSGATE OrGate)
 {
     ASSERT(OrGate);
     if (KsGateGetStateUnsafe(OrGate))
@@ -3156,77 +3019,74 @@ KsGateTerminateOr(
     }
 }
 
-#endif
-
+#endif /* !_NTOS_ */
 
 struct _KSMAPPING {
-    PHYSICAL_ADDRESS PhysicalAddress;
-    ULONG ByteCount;
-    ULONG Alignment;
+  PHYSICAL_ADDRESS PhysicalAddress;
+  ULONG ByteCount;
+  ULONG Alignment;
 };
-#endif
+
+#endif /* _NTDDK_ */
 
 typedef enum {
-    KSSTREAM_POINTER_STATE_UNLOCKED = 0,
-    KSSTREAM_POINTER_STATE_LOCKED
+  KSSTREAM_POINTER_STATE_UNLOCKED = 0,
+  KSSTREAM_POINTER_STATE_LOCKED
 } KSSTREAM_POINTER_STATE;
 
 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
 
-struct _KSSTREAM_POINTER_OFFSET
-{
+struct _KSSTREAM_POINTER_OFFSET {
 #if defined(_NTDDK_)
-    union {
-        PUCHAR Data;
-        PKSMAPPING Mappings;
-    };
-#else
+  union {
     PUCHAR Data;
+    PKSMAPPING Mappings;
+  };
+#else
+  PUCHAR Data;
 #endif
 #if !defined(_WIN64)
-    PVOID Alignment;
+  PVOID Alignment;
 #endif
-    ULONG Count;
-    ULONG Remaining;
+  ULONG Count;
+  ULONG Remaining;
 };
+
 #if defined(_NTDDK_)
-struct _KSSTREAM_POINTER
-{
-    PVOID Context;
-    PKSPIN Pin;
-    PKSSTREAM_HEADER StreamHeader;
-    PKSSTREAM_POINTER_OFFSET Offset;
-    KSSTREAM_POINTER_OFFSET OffsetIn;
-    KSSTREAM_POINTER_OFFSET OffsetOut;
+
+struct _KSSTREAM_POINTER {
+  PVOID Context;
+  PKSPIN Pin;
+  PKSSTREAM_HEADER StreamHeader;
+  PKSSTREAM_POINTER_OFFSET Offset;
+  KSSTREAM_POINTER_OFFSET OffsetIn;
+  KSSTREAM_POINTER_OFFSET OffsetOut;
 };
 
-struct _KSPROCESSPIN
-{
-    PKSPIN Pin;
-    PKSSTREAM_POINTER StreamPointer;
-    PKSPROCESSPIN InPlaceCounterpart;
-    PKSPROCESSPIN DelegateBranch;
-    PKSPROCESSPIN CopySource;
-    PVOID Data;
-    ULONG BytesAvailable;
-    ULONG BytesUsed;
-    ULONG Flags;
-    BOOLEAN Terminate;
+struct _KSPROCESSPIN {
+  PKSPIN Pin;
+  PKSSTREAM_POINTER StreamPointer;
+  PKSPROCESSPIN InPlaceCounterpart;
+  PKSPROCESSPIN DelegateBranch;
+  PKSPROCESSPIN CopySource;
+  _Field_size_bytes_(BytesAvailable) PVOID Data;
+  ULONG BytesAvailable;
+  ULONG BytesUsed;
+  ULONG Flags;
+  BOOLEAN Terminate;
 };
 
-struct _KSPROCESSPIN_INDEXENTRY
-{
-    PKSPROCESSPIN* Pins;
-    ULONG Count;
+struct _KSPROCESSPIN_INDEXENTRY {
+  _Field_size_(Count) PKSPROCESSPIN *Pins;
+  ULONG Count;
 };
-#endif
+
+#endif /* _NTDDK_ */
 
 /* ===============================================================
     Device Dispatch
 */
 
-
-
 #if defined(_NTDDK_)
 
 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
@@ -3236,164 +3096,181 @@ typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
 
-typedef NTSTATUS (NTAPI *PFNKSDEVICECREATE)(
-    IN PKSDEVICE Device);
-
-typedef NTSTATUS (NTAPI *PFNKSDEVICEPNPSTART)(
-    IN PKSDEVICE Device,
-    IN PIRP Irp,
-    IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL,
-    IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL);
-
-typedef NTSTATUS (NTAPI *PFNKSDEVICE)(
-    IN PKSDEVICE Device);
-
-typedef NTSTATUS (NTAPI *PFNKSDEVICEIRP)(
-    IN PKSDEVICE Device,
-    IN PIRP Irp);
-
-typedef VOID (NTAPI *PFNKSDEVICEIRPVOID)(
-    IN PKSDEVICE Device,
-    IN PIRP Irp);
-
-typedef NTSTATUS (NTAPI *PFNKSDEVICEQUERYCAPABILITIES)(
-    IN PKSDEVICE Device,
-    IN PIRP Irp,
-    IN OUT PDEVICE_CAPABILITIES Capabilities);
-
-typedef NTSTATUS (NTAPI *PFNKSDEVICEQUERYPOWER)(
-    IN PKSDEVICE Device,
-    IN PIRP Irp,
-    IN DEVICE_POWER_STATE DeviceTo,
-    IN DEVICE_POWER_STATE DeviceFrom,
-    IN SYSTEM_POWER_STATE SystemTo,
-    IN SYSTEM_POWER_STATE SystemFrom,
-    IN POWER_ACTION Action);
-
-typedef VOID (NTAPI *PFNKSDEVICESETPOWER)(
-    IN PKSDEVICE Device,
-    IN PIRP Irp,
-    IN DEVICE_POWER_STATE To,
-    IN DEVICE_POWER_STATE From);
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSDEVICECREATE)(
+  _In_ PKSDEVICE Device);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSDEVICEPNPSTART)(
+  _In_ PKSDEVICE Device,
+  _In_ PIRP Irp,
+  _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList,
+  _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSDEVICE)(
+  _In_ PKSDEVICE Device);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSDEVICEIRP)(
+  _In_ PKSDEVICE Device,
+  _In_ PIRP Irp);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef VOID
+(NTAPI *PFNKSDEVICEIRPVOID)(
+  _In_ PKSDEVICE Device,
+  _In_ PIRP Irp);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSDEVICEQUERYCAPABILITIES)(
+  _In_ PKSDEVICE Device,
+  _In_ PIRP Irp,
+  _Inout_ PDEVICE_CAPABILITIES Capabilities);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSDEVICEQUERYPOWER)(
+  _In_ PKSDEVICE Device,
+  _In_ PIRP Irp,
+  _In_ DEVICE_POWER_STATE DeviceTo,
+  _In_ DEVICE_POWER_STATE DeviceFrom,
+  _In_ SYSTEM_POWER_STATE SystemTo,
+  _In_ SYSTEM_POWER_STATE SystemFrom,
+  _In_ POWER_ACTION Action);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef VOID
+(NTAPI *PFNKSDEVICESETPOWER)(
+  _In_ PKSDEVICE Device,
+  _In_ PIRP Irp,
+  _In_ DEVICE_POWER_STATE To,
+  _In_ DEVICE_POWER_STATE From);
 
 typedef struct _KSDEVICE_DISPATCH {
-    PFNKSDEVICECREATE Add;
-    PFNKSDEVICEPNPSTART Start;
-    PFNKSDEVICE PostStart;
-    PFNKSDEVICEIRP QueryStop;
-    PFNKSDEVICEIRPVOID CancelStop;
-    PFNKSDEVICEIRPVOID Stop;
-    PFNKSDEVICEIRP QueryRemove;
-    PFNKSDEVICEIRPVOID CancelRemove;
-    PFNKSDEVICEIRPVOID Remove;
-    PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
-    PFNKSDEVICEIRPVOID SurpriseRemoval;
-    PFNKSDEVICEQUERYPOWER QueryPower;
-    PFNKSDEVICESETPOWER SetPower;
-    PFNKSDEVICEIRP QueryInterface;
-}KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
+  PFNKSDEVICECREATE Add;
+  PFNKSDEVICEPNPSTART Start;
+  PFNKSDEVICE PostStart;
+  PFNKSDEVICEIRP QueryStop;
+  PFNKSDEVICEIRPVOID CancelStop;
+  PFNKSDEVICEIRPVOID Stop;
+  PFNKSDEVICEIRP QueryRemove;
+  PFNKSDEVICEIRPVOID CancelRemove;
+  PFNKSDEVICEIRPVOID Remove;
+  PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
+  PFNKSDEVICEIRPVOID SurpriseRemoval;
+  PFNKSDEVICEQUERYPOWER QueryPower;
+  PFNKSDEVICESETPOWER SetPower;
+  PFNKSDEVICEIRP QueryInterface;
+} KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
 
 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
-#define MIN_DEV_VER_FOR_FLAGS (0x110)
+#define MIN_DEV_VER_FOR_FLAGS         (0x110)
 #endif
 
-struct _KSDEVICE
-{
-    const KSDEVICE_DESCRIPTOR* Descriptor;
-    KSOBJECT_BAG Bag;
-    PVOID Context;
-    PDEVICE_OBJECT FunctionalDeviceObject;
-    PDEVICE_OBJECT PhysicalDeviceObject;
-    PDEVICE_OBJECT NextDeviceObject;
-    BOOLEAN Started;
-    SYSTEM_POWER_STATE SystemPowerState;
-    DEVICE_POWER_STATE DevicePowerState;
+struct _KSDEVICE {
+  const KSDEVICE_DESCRIPTOR* Descriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
+  PDEVICE_OBJECT FunctionalDeviceObject;
+  PDEVICE_OBJECT PhysicalDeviceObject;
+  PDEVICE_OBJECT NextDeviceObject;
+  BOOLEAN Started;
+  SYSTEM_POWER_STATE SystemPowerState;
+  DEVICE_POWER_STATE DevicePowerState;
 };
-#endif
+
+#endif /* _NTDDK_ */
 
 /* ===============================================================
     Filter Dispatch
 */
+
 #if defined(_NTDDK_)
-struct _KSFILTER
-{
-    const KSFILTER_DESCRIPTOR* Descriptor;
-    KSOBJECT_BAG Bag;
-    PVOID Context;
+
+struct _KSFILTER {
+  const KSFILTER_DESCRIPTOR* Descriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
 };
 
-typedef
-void
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef void
 (NTAPI *PFNKSFILTERPOWER)(
-    IN PKSFILTER Filter,
-    IN DEVICE_POWER_STATE State
-    );
-
-typedef NTSTATUS (NTAPI *PFNKSFILTERIRP)(
-    IN PKSFILTER Filter,
-    IN PIRP Irp);
-
-typedef NTSTATUS (NTAPI *PFNKSFILTERPROCESS)(
-    IN PKSFILTER Filter,
-    IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex);
-
-typedef NTSTATUS (NTAPI *PFNKSFILTERVOID)(
-    IN PKSFILTER Filter);
-
-struct _KSFILTER_DISPATCH
-{
-    PFNKSFILTERIRP Create;
-    PFNKSFILTERIRP Close;
-    PFNKSFILTERPROCESS Process;
-    PFNKSFILTERVOID Reset;
+  _In_ PKSFILTER Filter,
+  _In_ DEVICE_POWER_STATE State);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSFILTERIRP)(
+  _In_ PKSFILTER Filter,
+  _In_ PIRP Irp);
+
+typedef NTSTATUS
+(NTAPI *PFNKSFILTERPROCESS)(
+  _In_ PKSFILTER Filter,
+  _In_ PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSFILTERVOID)(
+  _In_ PKSFILTER Filter);
+
+struct _KSFILTER_DISPATCH {
+  PFNKSFILTERIRP Create;
+  PFNKSFILTERIRP Close;
+  PFNKSFILTERPROCESS Process;
+  PFNKSFILTERVOID Reset;
 };
 
-struct _KSNODE_DESCRIPTOR
-{
-  const KSAUTOMATION_TABLE*  AutomationTable;
-  const GUID*  Type;
-  const GUID*  Name;
+struct _KSNODE_DESCRIPTOR {
+  const KSAUTOMATION_TABLE *AutomationTable;
+  const GUID *Type;
+  const GUID *Name;
 #if !defined(_WIN64)
-    PVOID Alignment;
+  PVOID Alignment;
 #endif
 };
 
-struct _KSFILTER_DESCRIPTOR
-{
-  const KSFILTER_DISPATCH*  Dispatch;
-  const KSAUTOMATION_TABLE*  AutomationTable;
-  ULONG  Version;
-  ULONG  Flags;
-  const GUID*  ReferenceGuid;
-  ULONG  PinDescriptorsCount;
-  ULONG  PinDescriptorSize;
-  const KSPIN_DESCRIPTOR_EX*  PinDescriptors;
-  ULONG  CategoriesCount;
-  const GUID*  Categories;
-  ULONG  NodeDescriptorsCount;
-  ULONG  NodeDescriptorSize;
-  const KSNODE_DESCRIPTOR*  NodeDescriptors;
-  ULONG  ConnectionsCount;
-  const KSTOPOLOGY_CONNECTION*  Connections;
-  const KSCOMPONENTID*  ComponentId;
+struct _KSFILTER_DESCRIPTOR {
+  const KSFILTER_DISPATCH *Dispatch;
+  const KSAUTOMATION_TABLE *AutomationTable;
+  ULONG Version;
+  ULONG Flags;
+  const GUID *ReferenceGuid;
+  ULONG PinDescriptorsCount;
+  ULONG PinDescriptorSize;
+  _Field_size_bytes_(PinDescriptorsCount * PinDescriptorSize) const KSPIN_DESCRIPTOR_EX *PinDescriptors;
+  ULONG CategoriesCount;
+  _Field_size_(CategoriesCount) const GUID *Categories;
+  ULONG NodeDescriptorsCount;
+  ULONG NodeDescriptorSize;
+  _Field_size_bytes_(NodeDescriptorsCount * NodeDescriptorSize) const KSNODE_DESCRIPTOR *NodeDescriptors;
+  ULONG ConnectionsCount;
+  _Field_size_(ConnectionsCount) const KSTOPOLOGY_CONNECTION *Connections;
+  const KSCOMPONENTID *ComponentId;
 };
 
 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
 
-struct _KSDEVICE_DESCRIPTOR
-{
-    const KSDEVICE_DISPATCH*  Dispatch;
-    ULONG  FilterDescriptorsCount;
-    const  KSFILTER_DESCRIPTOR*const* FilterDescriptors;
-    ULONG  Version;
-    ULONG  Flags;
+struct _KSDEVICE_DESCRIPTOR {
+  const KSDEVICE_DISPATCH *Dispatch;
+  ULONG FilterDescriptorsCount;
+  _Field_size_(FilterDescriptorsCount) const KSFILTER_DESCRIPTOR * const *FilterDescriptors;
+  ULONG Version;
+  ULONG Flags;
 };
 
 struct _KSFILTERFACTORY {
-    const KSFILTER_DESCRIPTOR* FilterDescriptor;
-    KSOBJECT_BAG Bag;
-    PVOID Context;
+  const KSFILTER_DESCRIPTOR* FilterDescriptor;
+  KSOBJECT_BAG Bag;
+  PVOID Context;
 };
 
 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
@@ -3434,127 +3311,189 @@ struct _KSFILTERFACTORY {
     0,\
     NULL
 
-#endif
+#endif /* _NTDDK_ */
+
 /* ===============================================================
     Minidriver Callbacks
 */
+
 #if defined(_NTDDK_)
-typedef NTSTATUS (NTAPI *KStrMethodHandler)(
-    IN  PIRP Irp,
-    IN  PKSIDENTIFIER Request,
-    IN  OUT PVOID Data);
-
-typedef NTSTATUS (NTAPI *KStrSupportHandler)(
-    IN  PIRP Irp,
-    IN  PKSIDENTIFIER Request,
-    IN  OUT PVOID Data);
+
+typedef NTSTATUS
+(NTAPI *KStrMethodHandler)(
+  IN PIRP Irp,
+  IN PKSIDENTIFIER Request,
+  IN OUT PVOID Data);
+
+typedef NTSTATUS
+(NTAPI *KStrSupportHandler)(
+  IN PIRP Irp,
+  IN PKSIDENTIFIER Request,
+  IN OUT PVOID Data);
+
 #endif
 
 /* ===============================================================
     Allocator Functions
 */
+
 #if defined(_NTDDK_)
-KSDDKAPI NTSTATUS NTAPI
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreateAllocator(
-    IN  HANDLE ConnectionHandle,
-    IN  PKSALLOCATOR_FRAMING AllocatorFraming,
-    OUT PHANDLE AllocatorHandle);
+  _In_ HANDLE ConnectionHandle,
+  _In_ PKSALLOCATOR_FRAMING AllocatorFraming,
+  _Out_ PHANDLE AllocatorHandle);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreateDefaultAllocator(
-    IN  PIRP Irp);
+  _In_ PIRP Irp);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsValidateAllocatorCreateRequest(
-    IN  PIRP Irp,
-    OUT PKSALLOCATOR_FRAMING* AllocatorFraming);
+  _In_ PIRP Irp,
+  _Out_ PKSALLOCATOR_FRAMING *AllocatorFraming);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreateDefaultAllocatorEx(
-    IN  PIRP Irp,
-    IN  PVOID InitializeContext OPTIONAL,
-    IN  PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL,
-    IN  PFNKSDEFAULTFREE DefaultFree OPTIONAL,
-    IN  PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL,
-    IN  PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL);
-
-KSDDKAPI NTSTATUS NTAPI
+  _In_ PIRP Irp,
+  _In_opt_ PVOID InitializeContext,
+  _In_opt_ PFNKSDEFAULTALLOCATE DefaultAllocate,
+  _In_opt_ PFNKSDEFAULTFREE DefaultFree,
+  _In_opt_ PFNKSINITIALIZEALLOCATOR InitializeAllocator,
+  _In_opt_ PFNKSDELETEALLOCATOR DeleteAllocator);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsValidateAllocatorFramingEx(
-    IN  PKSALLOCATOR_FRAMING_EX Framing,
-    IN  ULONG BufferSize,
-    IN  const KSALLOCATOR_FRAMING_EX* PinFraming);
-#endif
+  _In_ PKSALLOCATOR_FRAMING_EX Framing,
+  _In_ ULONG BufferSize,
+  _In_ const KSALLOCATOR_FRAMING_EX *PinFraming);
+
+#endif /* _NTDDK_ */
 
 /* ===============================================================
     Clock Functions
 */
-#if defined(_NTDDK_)
-typedef BOOLEAN (NTAPI *PFNKSSETTIMER)(
-    IN  PVOID Context,
-    IN  PKTIMER Timer,
-    IN  LARGE_INTEGER DueTime,
-    IN  PKDPC Dpc);
 
-typedef BOOLEAN (NTAPI *PFNKSCANCELTIMER)(
-    IN  PVOID Context,
-    IN  PKTIMER Timer);
-
-typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(
-    IN  PVOID Context,
-    OUT PLONGLONG SystemTime);
+#if defined(_NTDDK_)
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef BOOLEAN
+(NTAPI *PFNKSSETTIMER)(
+  _In_ PVOID Context,
+  _In_ PKTIMER Timer,
+  _In_ LARGE_INTEGER DueTime,
+  _In_ PKDPC Dpc);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef BOOLEAN
+(NTAPI *PFNKSCANCELTIMER)(
+  _In_ PVOID Context,
+  _In_ PKTIMER Timer);
+
+typedef LONGLONG
+(FASTCALL *PFNKSCORRELATEDTIME)(
+  _In_ PVOID Context,
+  _Out_ PLONGLONG SystemTime);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreateClock(
-    IN  HANDLE ConnectionHandle,
-    IN  PKSCLOCK_CREATE ClockCreate,
-    OUT PHANDLE ClockHandle);
+  _In_ HANDLE ConnectionHandle,
+  _In_ PKSCLOCK_CREATE ClockCreate,
+  _Out_ PHANDLE ClockHandle);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreateDefaultClock(
-    IN  PIRP Irp,
-    IN  PKSDEFAULTCLOCK DefaultClock);
+  _In_ PIRP Irp,
+  _In_ PKSDEFAULTCLOCK DefaultClock);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAllocateDefaultClock(
-    OUT PKSDEFAULTCLOCK* DefaultClock);
+  _Out_ PKSDEFAULTCLOCK *DefaultClock);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAllocateDefaultClockEx(
-    OUT PKSDEFAULTCLOCK* DefaultClock,
-    IN  PVOID Context OPTIONAL,
-    IN  PFNKSSETTIMER SetTimer OPTIONAL,
-    IN  PFNKSCANCELTIMER CancelTimer OPTIONAL,
-    IN  PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL,
-    IN  const KSRESOLUTION* Resolution OPTIONAL,
-    IN  ULONG Flags);
-
-KSDDKAPI VOID NTAPI
+  _Out_ PKSDEFAULTCLOCK *DefaultClock,
+  _In_opt_ PVOID Context,
+  _In_opt_ PFNKSSETTIMER SetTimer,
+  _In_opt_ PFNKSCANCELTIMER CancelTimer,
+  _In_opt_ PFNKSCORRELATEDTIME CorrelatedTime,
+  _In_opt_ const KSRESOLUTION *Resolution,
+  _In_ ULONG Flags);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsFreeDefaultClock(
-    IN  PKSDEFAULTCLOCK DefaultClock);
+  _In_ PKSDEFAULTCLOCK DefaultClock);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsValidateClockCreateRequest(
-    IN  PIRP Irp,
-    OUT PKSCLOCK_CREATE* ClockCreate);
+  _In_ PIRP Irp,
+  _Outptr_ PKSCLOCK_CREATE *ClockCreate);
 
-KSDDKAPI KSSTATE NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+KSSTATE
+NTAPI
 KsGetDefaultClockState(
-    IN  PKSDEFAULTCLOCK DefaultClock);
+  _In_ PKSDEFAULTCLOCK DefaultClock);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsSetDefaultClockState(
-    IN  PKSDEFAULTCLOCK DefaultClock,
-    IN  KSSTATE State);
+  _In_ PKSDEFAULTCLOCK DefaultClock,
+  _In_ KSSTATE State);
 
-KSDDKAPI LONGLONG NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+LONGLONG
+NTAPI
 KsGetDefaultClockTime(
-    IN  PKSDEFAULTCLOCK DefaultClock);
+  _In_ PKSDEFAULTCLOCK DefaultClock);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsSetDefaultClockTime(
-    IN  PKSDEFAULTCLOCK DefaultClock,
-    IN  LONGLONG Time);
-#endif
+  _In_ PKSDEFAULTCLOCK DefaultClock,
+  _In_ LONGLONG Time);
+
+#endif /* _NTDDK_ */
 
 /* ===============================================================
     Method Functions
@@ -3562,81 +3501,109 @@ KsSetDefaultClockTime(
 
 /* Method sets - TODO: Make into macros! */
 #if defined(_NTDDK_)
+
 #if 0
+
 VOID
 KSMETHOD_SET_IRP_STORAGE(
-    IN  IRP Irp);
+  IN IRP Irp);
 
 VOID
 KSMETHOD_ITEM_IRP_STORAGE(
-    IN  IRP Irp);
+  IN IRP Irp);
 
 VOID
 KSMETHOD_TYPE_IRP_STORAGE(
-    IN  IRP Irp);
+  IN IRP Irp);
+
 #endif
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsMethodHandler(
-    IN  PIRP Irp,
-    IN  ULONG MethodSetsCount,
-    IN  PKSMETHOD_SET MethodSet);
+  _In_ PIRP Irp,
+  _In_ ULONG MethodSetsCount,
+  _In_reads_(MethodSetsCount) const PKSMETHOD_SET MethodSet);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsMethodHandlerWithAllocator(
-    IN  PIRP Irp,
-    IN  ULONG MethodSetsCount,
-    IN  PKSMETHOD_SET MethodSet,
-    IN  PFNKSALLOCATOR Allocator OPTIONAL,
-    IN  ULONG MethodItemSize OPTIONAL);
+  _In_ PIRP Irp,
+  _In_ ULONG MethodSetsCount,
+  _In_reads_(MethodSetsCount) const PKSMETHOD_SET MethodSet,
+  _In_opt_ PFNKSALLOCATOR Allocator,
+  _In_opt_ ULONG MethodItemSize);
 
-KSDDKAPI BOOLEAN NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+BOOLEAN
+NTAPI
 KsFastMethodHandler(
-    IN  PFILE_OBJECT FileObject,
-    IN  PKSMETHOD UNALIGNED Method,
-    IN  ULONG MethodLength,
-    IN  OUT PVOID UNALIGNED Data,
-    IN  ULONG DataLength,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN  ULONG MethodSetsCount,
-    IN  const KSMETHOD_SET* MethodSet);
-#endif
+  _In_ PFILE_OBJECT FileObject,
+  _In_reads_bytes_(MethodLength) PKSMETHOD UNALIGNED Method,
+  _In_ ULONG MethodLength,
+  _Inout_updates_bytes_(DataLength) PVOID UNALIGNED Data,
+  _In_ ULONG DataLength,
+  _Out_ PIO_STATUS_BLOCK IoStatus,
+  _In_ ULONG MethodSetsCount,
+  _In_reads_(MethodSetsCount) const KSMETHOD_SET *MethodSet);
+
+#endif /* _NTDDK_ */
 
 /* ===============================================================
     Property Functions
 */
+
 #if defined(_NTDDK_)
-KSDDKAPI NTSTATUS NTAPI
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsPropertyHandler(
-    IN  PIRP Irp,
-    IN  ULONG PropertySetsCount,
-    IN  const KSPROPERTY_SET* PropertySet);
+  _In_ PIRP Irp,
+  _In_ ULONG PropertySetsCount,
+  _In_reads_(PropertySetsCount) const KSPROPERTY_SET *PropertySet);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsPropertyHandlerWithAllocator(
-    IN  PIRP Irp,
-    IN  ULONG PropertySetsCount,
-    IN  PKSPROPERTY_SET PropertySet,
-    IN  PFNKSALLOCATOR Allocator OPTIONAL,
-    IN  ULONG PropertyItemSize OPTIONAL);
+  _In_ PIRP Irp,
+  _In_ ULONG PropertySetsCount,
+  _In_reads_(PropertySetsCount) const PKSPROPERTY_SET PropertySet,
+  _In_opt_ PFNKSALLOCATOR Allocator,
+  _In_opt_ ULONG PropertyItemSize);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsUnserializeObjectPropertiesFromRegistry(
-    IN  PFILE_OBJECT FileObject,
-    IN  HANDLE ParentKey OPTIONAL,
-    IN  PUNICODE_STRING RegistryPath OPTIONAL);
+  _In_ PFILE_OBJECT FileObject,
+  _In_opt_ HANDLE ParentKey,
+  _In_opt_ PUNICODE_STRING RegistryPath);
 
-KSDDKAPI BOOLEAN NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+BOOLEAN
+NTAPI
 KsFastPropertyHandler(
-    IN  PFILE_OBJECT FileObject,
-    IN  PKSPROPERTY UNALIGNED Property,
-    IN  ULONG PropertyLength,
-    IN  OUT PVOID UNALIGNED Data,
-    IN  ULONG DataLength,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN  ULONG PropertySetsCount,
-    IN  const KSPROPERTY_SET* PropertySet);
-#endif
+  _In_ PFILE_OBJECT FileObject,
+  _In_reads_bytes_(PropertyLength) PKSPROPERTY UNALIGNED Property,
+  _In_ ULONG PropertyLength,
+  _In_reads_bytes_(DataLength) PVOID UNALIGNED Data,
+  _In_ ULONG DataLength,
+  _Out_ PIO_STATUS_BLOCK IoStatus,
+  _In_ ULONG PropertySetsCount,
+  _In_reads_(PropertySetsCount) const KSPROPERTY_SET *PropertySet);
+
+#endif /* _NTDDK_ */
 
 /* ===============================================================
     Event Functions
@@ -3651,647 +3618,865 @@ KsFastPropertyHandler(
 #define KSPROBE_SYSTEMADDRESS   0x00000040
 #define KSPROBE_MODIFY          0x00000200
 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
-#define KSPROBE_ALLOWFORMATCHANGE   0x00000080
+#define KSPROBE_ALLOWFORMATCHANGE 0x00000080
 
-#define KSSTREAM_READ           KSPROBE_STREAMREAD
-#define KSSTREAM_WRITE          KSPROBE_STREAMWRITE
-#define KSSTREAM_PAGED_DATA     0x00000000
-#define KSSTREAM_NONPAGED_DATA  0x00000100
-#define KSSTREAM_SYNCHRONOUS    0x00001000
+#define KSSTREAM_READ             KSPROBE_STREAMREAD
+#define KSSTREAM_WRITE            KSPROBE_STREAMWRITE
+#define KSSTREAM_PAGED_DATA       0x00000000
+#define KSSTREAM_NONPAGED_DATA    0x00000100
+#define KSSTREAM_SYNCHRONOUS      0x00001000
 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
 
-typedef
-BOOLEAN
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef BOOLEAN
 (NTAPI *PFNKSGENERATEEVENTCALLBACK)(
-    IN PVOID Context,
-    IN PKSEVENT_ENTRY EventEntry
-    );
+  _In_ PVOID Context,
+  _In_ PKSEVENT_ENTRY EventEntry);
 
-KSDDKAPI NTSTATUS NTAPI
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsGenerateEvent(
-    IN  PKSEVENT_ENTRY EntryEvent);
+  _In_ PKSEVENT_ENTRY EntryEvent);
 
-KSDDKAPI void NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+void
+NTAPI
 KsGenerateEvents(
-    IN PVOID Object,
-    IN const GUID* EventSet OPTIONAL,
-    IN ULONG EventId,
-    IN ULONG DataSize,
-    IN PVOID Data OPTIONAL,
-    IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
-    IN PVOID CallBackContext OPTIONAL
-    );
-
-
-KSDDKAPI NTSTATUS NTAPI
+  _In_ PVOID Object,
+  _In_opt_ const GUID *EventSet,
+  _In_ ULONG EventId,
+  _In_ ULONG DataSize,
+  _In_reads_bytes_opt_(DataSize) PVOID Data,
+  _In_opt_ PFNKSGENERATEEVENTCALLBACK CallBack,
+  _In_opt_ PVOID CallBackContext);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsEnableEventWithAllocator(
-    IN  PIRP Irp,
-    IN  ULONG EventSetsCount,
-    IN  PKSEVENT_SET EventSet,
-    IN  OUT PLIST_ENTRY EventsList OPTIONAL,
-    IN  KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
-    IN  PVOID EventsLock OPTIONAL,
-    IN  PFNKSALLOCATOR Allocator OPTIONAL,
-    IN  ULONG EventItemSize OPTIONAL);
-
-KSDDKAPI NTSTATUS NTAPI
+  _In_ PIRP Irp,
+  _In_ ULONG EventSetsCount,
+  _In_reads_(EventSetsCount) const PKSEVENT_SET EventSet,
+  _Inout_opt_ PLIST_ENTRY EventsList,
+  _In_opt_ KSEVENTS_LOCKTYPE EventsFlags,
+  _In_opt_ PVOID EventsLock,
+  _In_opt_ PFNKSALLOCATOR Allocator,
+  _In_opt_ ULONG EventItemSize);
+
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsGenerateDataEvent(
-    IN  PKSEVENT_ENTRY EventEntry,
-    IN  ULONG DataSize,
-    IN  PVOID Data);
+  _In_ PKSEVENT_ENTRY EventEntry,
+  _In_ ULONG DataSize,
+  _In_reads_bytes_(DataSize) PVOID Data);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsEnableEvent(
-    IN  PIRP Irp,
-    IN  ULONG EventSetsCount,
-    IN  KSEVENT_SET* EventSet,
-    IN  OUT PLIST_ENTRY EventsList OPTIONAL,
-    IN  KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
-    IN  PVOID EventsLock OPTIONAL);
-
-KSDDKAPI VOID NTAPI
+  _In_ PIRP Irp,
+  _In_ ULONG EventSetsCount,
+  _In_reads_(EventSetsCount) KSEVENT_SET *EventSet,
+  _Inout_opt_ PLIST_ENTRY EventsList,
+  _In_opt_ KSEVENTS_LOCKTYPE EventsFlags,
+  _In_opt_ PVOID EventsLock);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsDiscardEvent(
-    IN  PKSEVENT_ENTRY EventEntry);
+  _In_ PKSEVENT_ENTRY EventEntry);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDisableEvent(
-    IN  PIRP Irp,
-    IN  OUT PLIST_ENTRY EventsList,
-    IN  KSEVENTS_LOCKTYPE EventsFlags,
-    IN  PVOID EventsLock);
+  _In_ PIRP Irp,
+  _Inout_ PLIST_ENTRY EventsList,
+  _In_ KSEVENTS_LOCKTYPE EventsFlags,
+  _In_ PVOID EventsLock);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsFreeEventList(
-    IN  PFILE_OBJECT FileObject,
-    IN  OUT PLIST_ENTRY EventsList,
-    IN  KSEVENTS_LOCKTYPE EVentsFlags,
-    IN  PVOID EventsLock);
+  _In_ PFILE_OBJECT FileObject,
+  _Inout_ PLIST_ENTRY EventsList,
+  _In_ KSEVENTS_LOCKTYPE EventsFlags,
+  _In_ PVOID EventsLock);
 
 /* ===============================================================
     Topology Functions
 */
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsValidateTopologyNodeCreateRequest(
-    IN  PIRP Irp,
-    IN  PKSTOPOLOGY Topology,
-    OUT PKSNODE_CREATE* NodeCreate);
+  _In_ PIRP Irp,
+  _In_ PKSTOPOLOGY Topology,
+  _Out_ PKSNODE_CREATE *NodeCreate);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreateTopologyNode(
-    IN  HANDLE ParentHandle,
-    IN  PKSNODE_CREATE NodeCreate,
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE NodeHandle);
+  _In_ HANDLE ParentHandle,
+  _In_ PKSNODE_CREATE NodeCreate,
+  _In_ ACCESS_MASK DesiredAccess,
+  _Out_ PHANDLE NodeHandle);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsTopologyPropertyHandler(
-    IN  PIRP Irp,
-    IN  PKSPROPERTY Property,
-    IN  OUT PVOID Data,
-    IN  const KSTOPOLOGY* Topology);
-
-
+  _In_ PIRP Irp,
+  _In_ PKSPROPERTY Property,
+  _Inout_ PVOID Data,
+  _In_ const KSTOPOLOGY *Topology);
 
 /* ===============================================================
     Connectivity Functions
 */
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCreatePin(
-    IN  HANDLE FilterHandle,
-    IN  PKSPIN_CONNECT Connect,
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE ConnectionHandle);
+  _In_ HANDLE FilterHandle,
+  _In_ PKSPIN_CONNECT Connect,
+  _In_ ACCESS_MASK DesiredAccess,
+  _Out_ PHANDLE ConnectionHandle);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsValidateConnectRequest(
-    IN  PIRP Irp,
-    IN  ULONG DescriptorsCount,
-    IN  KSPIN_DESCRIPTOR* Descriptor,
-    OUT PKSPIN_CONNECT* Connect);
+  _In_ PIRP Irp,
+  _In_ ULONG DescriptorsCount,
+  _In_reads_(DescriptorsCount) KSPIN_DESCRIPTOR *Descriptor,
+  _Out_ PKSPIN_CONNECT *Connect);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsPinPropertyHandler(
-    IN  PIRP Irp,
-    IN  PKSPROPERTY Property,
-    IN  OUT PVOID Data,
-    IN  ULONG DescriptorsCount,
-    IN  const KSPIN_DESCRIPTOR* Descriptor);
-
-KSDDKAPI NTSTATUS NTAPI
+  _In_ PIRP Irp,
+  _In_ PKSPROPERTY Property,
+  _Inout_ PVOID Data,
+  _In_ ULONG DescriptorsCount,
+  _In_reads_(DescriptorsCount) const KSPIN_DESCRIPTOR *Descriptor);
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsPinDataIntersection(
-    IN  PIRP Irp,
-    IN  PKSP_PIN Pin,
-    OUT PVOID Data,
-    IN  ULONG DescriptorsCount,
-    IN  const KSPIN_DESCRIPTOR* Descriptor,
-    IN  PFNKSINTERSECTHANDLER IntersectHandler);
-
-KSDDKAPI NTSTATUS NTAPI
+  _In_ PIRP Irp,
+  _In_ PKSP_PIN Pin,
+  _Out_opt_ PVOID Data,
+  _In_ ULONG DescriptorsCount,
+  _In_reads_(DescriptorsCount) const KSPIN_DESCRIPTOR *Descriptor,
+  _In_ PFNKSINTERSECTHANDLER IntersectHandler);
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsPinDataIntersectionEx(
-    IN  PIRP Irp,
-    IN  PKSP_PIN Pin,
-    OUT PVOID Data,
-    IN  ULONG DescriptorsCount,
-    IN  const KSPIN_DESCRIPTOR* Descriptor,
-    IN  ULONG DescriptorSize,
-    IN  PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL,
-    IN  PVOID HandlerContext OPTIONAL);
-
-KSDDKAPI PKSFILTER NTAPI
+  _In_ PIRP Irp,
+  _In_ PKSP_PIN Pin,
+  _Out_ PVOID Data,
+  _In_ ULONG DescriptorsCount,
+  _In_reads_bytes_(DescriptorsCount * DescriptorSize) const KSPIN_DESCRIPTOR *Descriptor,
+  _In_ ULONG DescriptorSize,
+  _In_opt_ PFNKSINTERSECTHANDLEREX IntersectHandler,
+  _In_opt_ PVOID HandlerContext);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+PKSFILTER
+NTAPI
 KsPinGetParentFilter(
-    IN PKSPIN Pin
-    );
+  _In_ PKSPIN Pin);
 
-KSDDKAPI PKSPIN NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+PKSPIN
+NTAPI
 KsPinGetNextSiblingPin(
-    IN PKSPIN Pin
-    );
-
+  _In_ PKSPIN Pin);
 
 /* Does this belong here? */
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsHandleSizedListQuery(
-    IN  PIRP Irp,
-    IN  ULONG DataItemsCount,
-    IN  ULONG DataItemSize,
-    IN  const VOID* DataItems);
-
+  _In_ PIRP Irp,
+  _In_ ULONG DataItemsCount,
+  _In_ ULONG DataItemSize,
+  _In_reads_bytes_(DataItemsCount * DataItemSize) const VOID *DataItems);
 
 /* ===============================================================
     IRP Helper Functions
 */
 
-typedef NTSTATUS (NTAPI *PFNKSIRPLISTCALLBACK)(
-    IN  PIRP Irp,
-    IN  PVOID Context);
+_IRQL_requires_max_(DISPATCH_LEVEL)
+typedef NTSTATUS
+(NTAPI *PFNKSIRPLISTCALLBACK)(
+  _In_ PIRP Irp,
+  _In_ PVOID Context);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAcquireResetValue(
-    IN  PIRP Irp,
-    OUT KSRESET* ResetValue);
+  _In_ PIRP Irp,
+  _Out_ KSRESET *ResetValue);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsAddIrpToCancelableQueue(
-    IN  OUT PLIST_ENTRY QueueHead,
-    IN  PKSPIN_LOCK SpinLock,
-    IN  PIRP Irp,
-    IN  KSLIST_ENTRY_LOCATION ListLocation,
-    IN  PDRIVER_CANCEL DriverCancel OPTIONAL);
+  _Inout_ PLIST_ENTRY QueueHead,
+  _In_ PKSPIN_LOCK SpinLock,
+  _In_ PIRP Irp,
+  _In_ KSLIST_ENTRY_LOCATION ListLocation,
+  _In_opt_ PDRIVER_CANCEL DriverCancel);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAddObjectCreateItemToDeviceHeader(
-    IN  KSDEVICE_HEADER Header,
-    IN  PDRIVER_DISPATCH Create,
-    IN  PVOID Context,
-    IN  PWCHAR ObjectClass,
-    IN  PSECURITY_DESCRIPTOR SecurityDescriptor);
+  _In_ KSDEVICE_HEADER Header,
+  _In_ PDRIVER_DISPATCH Create,
+  _In_ PVOID Context,
+  _In_ PWSTR ObjectClass,
+  _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAddObjectCreateItemToObjectHeader(
-    IN  KSOBJECT_HEADER Header,
-    IN  PDRIVER_DISPATCH Create,
-    IN  PVOID Context,
-    IN  PWCHAR ObjectClass,
-    IN  PSECURITY_DESCRIPTOR SecurityDescriptor);
+  _In_ KSOBJECT_HEADER Header,
+  _In_ PDRIVER_DISPATCH Create,
+  _In_ PVOID Context,
+  _In_ PWSTR ObjectClass,
+  _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(APC_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAllocateDeviceHeader(
-    OUT KSDEVICE_HEADER* Header,
-    IN  ULONG ItemsCount,
-    IN  PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL);
+  _Out_ KSDEVICE_HEADER *Header,
+  _In_ ULONG ItemsCount,
+  _In_reads_opt_(ItemsCount) PKSOBJECT_CREATE_ITEM ItemsList);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAllocateExtraData(
-    IN  PIRP Irp,
-    IN  ULONG ExtraSize,
-    OUT PVOID* ExtraBuffer);
+  _Inout_ PIRP Irp,
+  _In_ ULONG ExtraSize,
+  _Out_ PVOID *ExtraBuffer);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAllocateObjectCreateItem(
-    IN  KSDEVICE_HEADER Header,
-    IN  PKSOBJECT_CREATE_ITEM CreateItem,
-    IN  BOOLEAN AllocateEntry,
-    IN  PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL);
+  _In_ KSDEVICE_HEADER Header,
+  _In_ PKSOBJECT_CREATE_ITEM CreateItem,
+  _In_ BOOLEAN AllocateEntry,
+  _In_opt_ PFNKSITEMFREECALLBACK ItemFreeCallback);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(APC_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsAllocateObjectHeader(
-    OUT KSOBJECT_HEADER *Header,
-    IN  ULONG ItemsCount,
-    IN  PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL,
-    IN  PIRP Irp,
-    IN  KSDISPATCH_TABLE* Table);
+  _Out_ KSOBJECT_HEADER *Header,
+  _In_ ULONG ItemsCount,
+  _In_reads_opt_(ItemsCount) PKSOBJECT_CREATE_ITEM ItemsList,
+  _In_ PIRP Irp,
+  _In_ KSDISPATCH_TABLE *Table);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsCancelIo(
-    IN  OUT PLIST_ENTRY QueueHead,
-    IN  PKSPIN_LOCK SpinLock);
+  _Inout_ PLIST_ENTRY QueueHead,
+  _In_ PKSPIN_LOCK SpinLock);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsCancelRoutine(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDefaultDeviceIoCompletion(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
-/* ELSEWHERE
-KSDDKAPI ULONG NTAPI
-KsDecrementCountedWorker(
-    IN  PKSWORKER Worker);
-*/
-
-KSDDKAPI BOOLEAN NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+BOOLEAN
+NTAPI
 KsDispatchFastIoDeviceControlFailure(
-    IN  PFILE_OBJECT FileObject,
-    IN  BOOLEAN Wait,
-    IN  PVOID InputBuffer  OPTIONAL,
-    IN  ULONG InputBufferLength,
-    OUT PVOID OutputBuffer  OPTIONAL,
-    IN  ULONG OutputBufferLength,
-    IN  ULONG IoControlCode,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN  PDEVICE_OBJECT DeviceObject);   /* always return false */
-
-KSDDKAPI BOOLEAN NTAPI
+  _In_ PFILE_OBJECT FileObject,
+  _In_ BOOLEAN Wait,
+  _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
+  _In_ ULONG InputBufferLength,
+  _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
+  _In_ ULONG OutputBufferLength,
+  _In_ ULONG IoControlCode,
+  _Out_ PIO_STATUS_BLOCK IoStatus,
+  _In_ PDEVICE_OBJECT DeviceObject);   /* always return false */
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+BOOLEAN
+NTAPI
 KsDispatchFastReadFailure(
-    IN  PFILE_OBJECT FileObject,
-    IN  PLARGE_INTEGER FileOffset,
-    IN  ULONG Length,
-    IN  BOOLEAN Wait,
-    IN  ULONG LockKey,
-    OUT PVOID Buffer,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN  PDEVICE_OBJECT DeviceObject);   /* always return false */
+  _In_ PFILE_OBJECT FileObject,
+  _In_ PLARGE_INTEGER FileOffset,
+  _In_ ULONG Length,
+  _In_ BOOLEAN Wait,
+  _In_ ULONG LockKey,
+  _Out_ PVOID Buffer,
+  _Out_ PIO_STATUS_BLOCK IoStatus,
+  _In_ PDEVICE_OBJECT DeviceObject);   /* always return false */
 
 /* This function does the same as the above */
 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDispatchInvalidDeviceRequest(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDispatchIrp(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDispatchSpecificMethod(
-    IN  PIRP Irp,
-    IN  PFNKSHANDLER Handler);
+  _In_ PIRP Irp,
+  _In_ PFNKSHANDLER Handler);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDispatchSpecificProperty(
-    IN  PIRP Irp,
-    IN  PFNKSHANDLER Handler);
+  _In_ PIRP Irp,
+  _In_ PFNKSHANDLER Handler);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsForwardAndCatchIrp(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp,
-    IN  PFILE_OBJECT FileObject,
-    IN  KSSTACK_USE StackUse);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp,
+  _In_ PFILE_OBJECT FileObject,
+  _In_ KSSTACK_USE StackUse);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsForwardIrp(
-    IN  PIRP Irp,
-    IN  PFILE_OBJECT FileObject,
-    IN  BOOLEAN ReuseStackLocation);
+  _In_ PIRP Irp,
+  _In_ PFILE_OBJECT FileObject,
+  _In_ BOOLEAN ReuseStackLocation);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(APC_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsFreeDeviceHeader(
-    IN  KSDEVICE_HEADER Header);
+  _In_ KSDEVICE_HEADER Header);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(APC_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsFreeObjectHeader(
-    IN  PVOID Header);
+  _In_ PVOID Header);
 
-KSDDKAPI NTSTATUS NTAPI
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsGetChildCreateParameter(
-    IN  PIRP Irp,
-    OUT PVOID* CreateParameter);
+  _In_ PIRP Irp,
+  _Out_ PVOID *CreateParameter);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsMoveIrpsOnCancelableQueue(
-    IN  OUT PLIST_ENTRY SourceList,
-    IN  PKSPIN_LOCK SourceLock,
-    IN  OUT PLIST_ENTRY DestinationList,
-    IN  PKSPIN_LOCK DestinationLock OPTIONAL,
-    IN  KSLIST_ENTRY_LOCATION ListLocation,
-    IN  PFNKSIRPLISTCALLBACK ListCallback,
-    IN  PVOID Context);
-
-KSDDKAPI NTSTATUS NTAPI
+  _Inout_ PLIST_ENTRY SourceList,
+  _In_ PKSPIN_LOCK SourceLock,
+  _Inout_ PLIST_ENTRY DestinationList,
+  _In_opt_ PKSPIN_LOCK DestinationLock,
+  _In_ KSLIST_ENTRY_LOCATION ListLocation,
+  _In_ PFNKSIRPLISTCALLBACK ListCallback,
+  _In_ PVOID Context);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsProbeStreamIrp(
-    IN  PIRP Irp,
-    IN  ULONG ProbeFlags,
-    IN  ULONG HeaderSize);
+  _Inout_ PIRP Irp,
+  _In_ ULONG ProbeFlags,
+  _In_ ULONG HeaderSize);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsQueryInformationFile(
-    IN  PFILE_OBJECT FileObject,
-    OUT PVOID FileInformation,
-    IN  ULONG Length,
-    IN  FILE_INFORMATION_CLASS FileInformationClass);
+  _In_ PFILE_OBJECT FileObject,
+  _Out_writes_bytes_(Length) PVOID FileInformation,
+  _In_ ULONG Length,
+  _In_ FILE_INFORMATION_CLASS FileInformationClass);
 
-KSDDKAPI ACCESS_MASK NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+ACCESS_MASK
+NTAPI
 KsQueryObjectAccessMask(
-    IN KSOBJECT_HEADER Header);
+  _In_ KSOBJECT_HEADER Header);
 
-KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+PKSOBJECT_CREATE_ITEM
+NTAPI
 KsQueryObjectCreateItem(
-    IN KSOBJECT_HEADER Header);
+  _In_ KSOBJECT_HEADER Header);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsReadFile(
-    IN  PFILE_OBJECT FileObject,
-    IN  PKEVENT Event OPTIONAL,
-    IN  PVOID PortContext OPTIONAL,
-    OUT PIO_STATUS_BLOCK IoStatusBlock,
-    OUT PVOID Buffer,
-    IN  ULONG Length,
-    IN  ULONG Key OPTIONAL,
-    IN  KPROCESSOR_MODE RequestorMode);
-
-KSDDKAPI VOID NTAPI
+  _In_ PFILE_OBJECT FileObject,
+  _In_opt_ PKEVENT Event,
+  _In_opt_ PVOID PortContext,
+  _Out_ PIO_STATUS_BLOCK IoStatusBlock,
+  _Out_writes_bytes_(Length) PVOID Buffer,
+  _In_ ULONG Length,
+  _In_opt_ ULONG Key,
+  _In_ KPROCESSOR_MODE RequestorMode);
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsReleaseIrpOnCancelableQueue(
-    IN  PIRP Irp,
-    IN  PDRIVER_CANCEL DriverCancel OPTIONAL);
+  _In_ PIRP Irp,
+  _In_opt_ PDRIVER_CANCEL DriverCancel);
 
-KSDDKAPI PIRP NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+PIRP
+NTAPI
 KsRemoveIrpFromCancelableQueue(
-    IN  OUT PLIST_ENTRY QueueHead,
-    IN  PKSPIN_LOCK SpinLock,
-    IN  KSLIST_ENTRY_LOCATION ListLocation,
-    IN  KSIRP_REMOVAL_OPERATION RemovalOperation);
+  _Inout_ PLIST_ENTRY QueueHead,
+  _In_ PKSPIN_LOCK SpinLock,
+  _In_ KSLIST_ENTRY_LOCATION ListLocation,
+  _In_ KSIRP_REMOVAL_OPERATION RemovalOperation);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsRemoveSpecificIrpFromCancelableQueue(
-    IN  PIRP Irp);
+  _In_ PIRP Irp);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsSetInformationFile(
-    IN  PFILE_OBJECT FileObject,
-    IN  PVOID FileInformation,
-    IN  ULONG Length,
-    IN  FILE_INFORMATION_CLASS FileInformationClass);
+  _In_ PFILE_OBJECT FileObject,
+  _In_reads_bytes_(Length) PVOID FileInformation,
+  _In_ ULONG Length,
+  _In_ FILE_INFORMATION_CLASS FileInformationClass);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsSetMajorFunctionHandler(
-    IN  PDRIVER_OBJECT DriverObject,
-    IN  ULONG MajorFunction);
+  _In_ PDRIVER_OBJECT DriverObject,
+  _In_ ULONG MajorFunction);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsStreamIo(
-    IN  PFILE_OBJECT FileObject,
-    IN  PKEVENT Event OPTIONAL,
-    IN  PVOID PortContext OPTIONAL,
-    IN  PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
-    IN  PVOID CompletionContext OPTIONAL,
-    IN  KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL,
-    OUT PIO_STATUS_BLOCK IoStatusBlock,
-    IN  OUT PVOID StreamHeaders,
-    IN  ULONG Length,
-    IN  ULONG Flags,
-    IN  KPROCESSOR_MODE RequestorMode);
-
-KSDDKAPI NTSTATUS NTAPI
-  KsWriteFile(
-    IN  PFILE_OBJECT FileObject,
-    IN  PKEVENT Event OPTIONAL,
-    IN  PVOID PortContext OPTIONAL,
-    OUT PIO_STATUS_BLOCK IoStatusBlock,
-    IN  PVOID Buffer,
-    IN  ULONG Length,
-    IN  ULONG Key OPTIONAL,
-    IN  KPROCESSOR_MODE RequestorMode);
-
-
-KSDDKAPI NTSTATUS NTAPI
-  KsDefaultForwardIrp(
-    IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp);
+  _In_ PFILE_OBJECT FileObject,
+  _In_opt_ PKEVENT Event,
+  _In_opt_ PVOID PortContext,
+  _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine,
+  _In_opt_ PVOID CompletionContext,
+  _In_opt_ KSCOMPLETION_INVOCATION CompletionInvocationFlags,
+  _Out_ PIO_STATUS_BLOCK IoStatusBlock,
+  _Inout_updates_bytes_(Length) PVOID StreamHeaders,
+  _In_ ULONG Length,
+  _In_ ULONG Flags,
+  _In_ KPROCESSOR_MODE RequestorMode);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsWriteFile(
+  _In_ PFILE_OBJECT FileObject,
+  _In_opt_ PKEVENT Event,
+  _In_opt_ PVOID PortContext,
+  _Out_ PIO_STATUS_BLOCK IoStatusBlock,
+  _In_reads_bytes_(Length) PVOID Buffer,
+  _In_ ULONG Length,
+  _In_opt_ ULONG Key,
+  _In_ KPROCESSOR_MODE RequestorMode);
+
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsDefaultForwardIrp(
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
 /* ===============================================================
     Worker Management Functions
 */
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsRegisterWorker(
-    IN  WORK_QUEUE_TYPE WorkQueueType,
-    OUT PKSWORKER* Worker);
+  _In_ WORK_QUEUE_TYPE WorkQueueType,
+  _Out_ PKSWORKER* Worker);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsUnregisterWorker(
-    IN  PKSWORKER Worker);
+  _In_ PKSWORKER Worker);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsRegisterCountedWorker(
-    IN  WORK_QUEUE_TYPE WorkQueueType,
-    IN  PWORK_QUEUE_ITEM CountedWorkItem,
-    OUT PKSWORKER* Worker);
+  _In_ WORK_QUEUE_TYPE WorkQueueType,
+  _In_ PWORK_QUEUE_ITEM CountedWorkItem,
+  _Out_ PKSWORKER *Worker);
 
-KSDDKAPI ULONG NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+ULONG
+NTAPI
 KsDecrementCountedWorker(
-    IN  PKSWORKER Worker);
+  _In_ PKSWORKER Worker);
 
-KSDDKAPI ULONG NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+ULONG
+NTAPI
 KsIncrementCountedWorker(
-    IN  PKSWORKER Worker);
+  _In_ PKSWORKER Worker);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(DISPATCH_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsQueueWorkItem(
-    IN  PKSWORKER Worker,
-    IN  PWORK_QUEUE_ITEM WorkItem);
-
+  _In_ PKSWORKER Worker,
+  _In_ PWORK_QUEUE_ITEM WorkItem);
 
 /* ===============================================================
     Resources / Images
 */
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsLoadResource(
-    IN  PVOID ImageBase,
-    IN  POOL_TYPE PoolType,
-    IN  ULONG_PTR ResourceName,
-    IN  ULONG ResourceType,
-    OUT PVOID* Resource,
-    OUT PULONG ResourceSize);
-
-/* TODO: Implement
-KSDDKAPI NTSTATUS NTAPI
+  _In_ PVOID ImageBase,
+  _In_ POOL_TYPE PoolType,
+  _In_ ULONG_PTR ResourceName,
+  _In_ ULONG ResourceType,
+  _Outptr_result_bytebuffer_(ResourceSize) PVOID *Resource,
+  _Out_opt_ PULONG ResourceSize);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsGetImageNameAndResourceId(
-    IN  HANDLE RegKey,
-    OUT PUNICODE_STRING ImageName,
-    OUT PULONG_PTR ResourceId,
-    OUT PULONG ValueType);
+  _In_ HANDLE RegKey,
+  _Out_ PUNICODE_STRING ImageName,
+  _Out_ PULONG_PTR ResourceId,
+  _Out_ PULONG ValueType);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsMapModuleName(
-    IN  PDEVICE_OBJECT PhysicalDeviceObject,
-    IN  PUNICODE_STRING ModuleName,
-    OUT PUNICODE_STRING ImageName,
-    OUT PULONG_PTR ResourceId,
-    OUT PULONG ValueType);
-*/
-
+  _In_ PDEVICE_OBJECT PhysicalDeviceObject,
+  _In_ PUNICODE_STRING ModuleName,
+  _Out_ PUNICODE_STRING ImageName,
+  _Out_ PULONG_PTR ResourceId,
+  _Out_ PULONG ValueType);
 
 /* ===============================================================
     Misc. Helper Functions
 */
 
-KSDDKAPI PVOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+PVOID
+NTAPI
 KsGetNextSibling(
-    IN PVOID Object);
+  _In_ PVOID Object);
 
-
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsCacheMedium(
-    IN  PUNICODE_STRING SymbolicLink,
-    IN  PKSPIN_MEDIUM Medium,
-    IN  ULONG PinDirection);
+  _In_ PUNICODE_STRING SymbolicLink,
+  _In_ PKSPIN_MEDIUM Medium,
+  _In_ ULONG PinDirection);
 
-KSDDKAPI NTSTATUS NTAPI
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDefaultDispatchPnp(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsSetDevicePnpAndBaseObject(
-    IN  KSDEVICE_HEADER Header,
-    IN  PDEVICE_OBJECT PnpDeviceObject,
-    IN  PDEVICE_OBJECT BaseDevice);
+  _In_ KSDEVICE_HEADER Header,
+  _In_ PDEVICE_OBJECT PnpDeviceObject,
+  _In_ PDEVICE_OBJECT BaseDevice);
 
-KSDDKAPI NTSTATUS NTAPI
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsDefaultDispatchPower(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  PIRP Irp);
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsSetPowerDispatch(
-    IN  KSOBJECT_HEADER Header,
-    IN  PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL,
-    IN  PVOID PowerContext OPTIONAL);
+  _In_ KSOBJECT_HEADER Header,
+  _In_opt_ PFNKSCONTEXT_DISPATCH PowerDispatch,
+  _In_opt_ PVOID PowerContext);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsReferenceBusObject(
-    IN  KSDEVICE_HEADER Header);
+  _In_ KSDEVICE_HEADER Header);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsDereferenceBusObject(
-    IN  KSDEVICE_HEADER Header);
+  _In_ KSDEVICE_HEADER Header);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsFreeObjectCreateItem(
-    IN  KSDEVICE_HEADER Header,
-    IN  PUNICODE_STRING CreateItem);
+  _In_ KSDEVICE_HEADER Header,
+  _In_ PUNICODE_STRING CreateItem);
 
-KSDDKAPI NTSTATUS NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsFreeObjectCreateItemsByContext(
-    IN  KSDEVICE_HEADER Header,
-    IN  PVOID Context);
+  _In_ KSDEVICE_HEADER Header,
+  _In_ PVOID Context);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsNullDriverUnload(
-    IN  PDRIVER_OBJECT DriverObject);
+  _In_ PDRIVER_OBJECT DriverObject);
 
-KSDDKAPI PDEVICE_OBJECT NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+PDEVICE_OBJECT
+NTAPI
 KsQueryDevicePnpObject(
-    IN  KSDEVICE_HEADER Header);
+  _In_ KSDEVICE_HEADER Header);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsRecalculateStackDepth(
-    IN  KSDEVICE_HEADER Header,
-    IN  BOOLEAN ReuseStackLocation);
+  _In_ KSDEVICE_HEADER Header,
+  _In_ BOOLEAN ReuseStackLocation);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsSetTargetDeviceObject(
-    IN  KSOBJECT_HEADER Header,
-    IN  PDEVICE_OBJECT TargetDevice OPTIONAL);
+  _In_ KSOBJECT_HEADER Header,
+  _In_opt_ PDEVICE_OBJECT TargetDevice);
 
-KSDDKAPI VOID NTAPI
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+VOID
+NTAPI
 KsSetTargetState(
-    IN  KSOBJECT_HEADER Header,
-    IN  KSTARGET_STATE TargetState);
+  _In_ KSOBJECT_HEADER Header,
+  _In_ KSTARGET_STATE TargetState);
 
-KSDDKAPI NTSTATUS NTAPI
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+KSDDKAPI
+NTSTATUS
+NTAPI
 KsSynchronousIoControlDevice(
-    IN  PFILE_OBJECT FileObject,
-    IN  KPROCESSOR_MODE RequestorMode,
-    IN  ULONG IoControl,
-    IN  PVOID InBuffer,
-    IN  ULONG InSize,
-    OUT PVOID OutBuffer,
-    IN  ULONG OUtSize,
-    OUT PULONG BytesReturned);
-
+  _In_ PFILE_OBJECT FileObject,
+  _In_ KPROCESSOR_MODE RequestorMode,
+  _In_ ULONG IoControl,
+  _In_reads_bytes_(InSize) PVOID InBuffer,
+  _In_ ULONG InSize,
+  _Out_writes_bytes_to_(OutSize, *BytesReturned) PVOID OutBuffer,
+  _In_ ULONG OutSize,
+  _Out_ PULONG BytesReturned);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PKSPIN
 NTAPI
 KsFilterGetFirstChildPin(
-    IN PKSFILTER Filter,
-    IN ULONG PinId
-    );
+  _In_ PKSFILTER Filter,
+  _In_ ULONG PinId);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PFILE_OBJECT
 NTAPI
 KsPinGetConnectedPinFileObject(
-    IN PKSPIN Pin
-    );
+  _In_ PKSPIN Pin);
 
-#else
+#else /* _NTDDK_ */
 
 #if !defined( KS_NO_CREATE_FUNCTIONS )
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 DWORD
 WINAPI
 KsCreateAllocator(
-    IN HANDLE ConnectionHandle,
-    IN PKSALLOCATOR_FRAMING AllocatorFraming,
-    OUT PHANDLE AllocatorHandle
-    );
+  _In_ HANDLE ConnectionHandle,
+  _In_ PKSALLOCATOR_FRAMING AllocatorFraming,
+  _Out_ PHANDLE AllocatorHandle);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 DWORD
 NTAPI
 KsCreateClock(
-    IN HANDLE ConnectionHandle,
-    IN PKSCLOCK_CREATE ClockCreate,
-    OUT PHANDLE ClockHandle
-    );
+  _In_ HANDLE ConnectionHandle,
+  _In_ PKSCLOCK_CREATE ClockCreate,
+  _Out_ PHANDLE ClockHandle);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 DWORD
 WINAPI
 KsCreatePin(
-    IN HANDLE FilterHandle,
-    IN PKSPIN_CONNECT Connect,
-    IN ACCESS_MASK DesiredAccess,
-    OUT PHANDLE ConnectionHandle
-    );
+  _In_ HANDLE FilterHandle,
+  _In_ PKSPIN_CONNECT Connect,
+  _In_ ACCESS_MASK DesiredAccess,
+  _Out_ PHANDLE ConnectionHandle);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 DWORD
 WINAPI
 KsCreateTopologyNode(
-    IN HANDLE ParentHandle,
-    IN PKSNODE_CREATE NodeCreate,
-    IN ACCESS_MASK DesiredAccess,
-    OUT PHANDLE NodeHandle
-    );
-    
-#endif
+  _In_ HANDLE ParentHandle,
+  _In_ PKSNODE_CREATE NodeCreate,
+  _In_ ACCESS_MASK DesiredAccess,
+  _Out_ PHANDLE NodeHandle);
 
 #endif
 
+#endif /* _NTDDK_ */
+
 /* ===============================================================
     AVStream Functions (XP / DirectX 8)
     NOT IMPLEMENTED YET
@@ -4300,284 +4485,302 @@ KsCreateTopologyNode(
 
 #if defined(_NTDDK_)
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsMergeAutomationTables(
-    OUT PKSAUTOMATION_TABLE* AutomationTableAB,
-    IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL,
-    IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL,
-    IN KSOBJECT_BAG Bag OPTIONAL
-    );
+  _Out_ PKSAUTOMATION_TABLE *AutomationTableAB,
+  _In_opt_ PKSAUTOMATION_TABLE AutomationTableA,
+  _In_opt_ PKSAUTOMATION_TABLE AutomationTableB,
+  _In_opt_ KSOBJECT_BAG Bag);
 
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsInitializeDriver(
-    IN PDRIVER_OBJECT  DriverObject,
-    IN PUNICODE_STRING  RegistryPath,
-    IN const KSDEVICE_DESCRIPTOR  *Descriptor OPTIONAL);
+  _In_ PDRIVER_OBJECT DriverObject,
+  _In_ PUNICODE_STRING RegistryPath,
+  _In_opt_ const KSDEVICE_DESCRIPTOR  *Descriptor);
 
 typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; //FIXME
 
-
-
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsInitializeDevice (
-    IN PDEVICE_OBJECT  FunctionalDeviceObject,
-    IN PDEVICE_OBJECT  PhysicalDeviceObject,
-    IN PDEVICE_OBJECT  NextDeviceObject,
-    IN const KSDEVICE_DESCRIPTOR*  Descriptor OPTIONAL);
-
-
-typedef void (NTAPI *PFNKSFILTERFACTORYPOWER)(
-    IN  PKSFILTERFACTORY FilterFactory,
-    IN  DEVICE_POWER_STATE State);
-
+  _In_ PDEVICE_OBJECT FunctionalDeviceObject,
+  _In_ PDEVICE_OBJECT PhysicalDeviceObject,
+  _In_ PDEVICE_OBJECT NextDeviceObject,
+  _In_opt_ const KSDEVICE_DESCRIPTOR *Descriptor);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+typedef void
+(NTAPI *PFNKSFILTERFACTORYPOWER)(
+  _In_ PKSFILTERFACTORY FilterFactory,
+  _In_ DEVICE_POWER_STATE State);
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 _KsEdit(
-    IN  KSOBJECT_BAG ObjectBag,
-    IN  OUT PVOID* PointerToPointerToItem,
-    IN  ULONG NewSize,
-    IN  ULONG OldSize,
-    IN  ULONG Tag);
+  _In_ KSOBJECT_BAG ObjectBag,
+  _Inout_ PVOID *PointerToPointerToItem,
+  _In_ ULONG NewSize,
+  _In_ ULONG OldSize,
+  _In_ ULONG Tag);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsAcquireControl(
-    IN  PVOID Object);
+  _In_ PVOID Object);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsAcquireDevice(
-    IN  PKSDEVICE Device);
+  _In_ PKSDEVICE Device);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsAddDevice(
-    IN  PDRIVER_OBJECT DriverObject,
-    IN  PDEVICE_OBJECT PhysicalDeviceObject);
+  _In_ PDRIVER_OBJECT DriverObject,
+  _In_ PDEVICE_OBJECT PhysicalDeviceObject);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsAddEvent(
-    IN  PVOID Object,
-    IN  PKSEVENT_ENTRY EventEntry);
+  _In_ PVOID Object,
+  _In_ PKSEVENT_ENTRY EventEntry);
 
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsAddItemToObjectBag(
-    IN  KSOBJECT_BAG ObjectBag,
-    IN  PVOID Item,
-    IN  PFNKSFREE Free OPTIONAL);
+  _In_ KSOBJECT_BAG ObjectBag,
+  _In_ __drv_aliasesMem PVOID Item,
+  _In_opt_ PFNKSFREE Free);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 ULONG
 NTAPI
 KsRemoveItemFromObjectBag(
-    IN KSOBJECT_BAG ObjectBag,
-    IN PVOID Item,
-    IN BOOLEAN Free);
+  _In_ KSOBJECT_BAG ObjectBag,
+  _In_ PVOID Item,
+  _In_ BOOLEAN Free);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsAllocateObjectBag(
-    IN  PKSDEVICE Device,
-    OUT KSOBJECT_BAG* ObjectBag);
+  _In_ PKSDEVICE Device,
+  _Out_ KSOBJECT_BAG *ObjectBag);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsFreeObjectBag(
-    IN KSOBJECT_BAG ObjectBag
-    );
+  _In_ KSOBJECT_BAG ObjectBag);
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsCompletePendingRequest(
-    IN  PIRP Irp);
+  _In_ PIRP Irp);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsCopyObjectBagItems(
-    IN  KSOBJECT_BAG ObjectBagDestination,
-    IN  KSOBJECT_BAG ObjectBagSource);
+  _In_ KSOBJECT_BAG ObjectBagDestination,
+  _In_ KSOBJECT_BAG ObjectBagSource);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsCreateDevice(
-    IN  PDRIVER_OBJECT DriverObject,
-    IN  PDEVICE_OBJECT PhysicalDeviceObject,
-    IN  const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL,
-    IN  ULONG ExtensionSize OPTIONAL,
-    OUT PKSDEVICE* Device OPTIONAL);
-
+  _In_ PDRIVER_OBJECT DriverObject,
+  _In_ PDEVICE_OBJECT PhysicalDeviceObject,
+  _In_opt_ const KSDEVICE_DESCRIPTOR *Descriptor,
+  _In_ ULONG ExtensionSize,
+  _Out_opt_ PKSDEVICE *Device);
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsCreateFilterFactory(
-    IN  PDEVICE_OBJECT DeviceObject,
-    IN  const KSFILTER_DESCRIPTOR* Descriptor,
-    IN  PWCHAR RefString OPTIONAL,
-    IN  PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
-    IN  ULONG CreateItemFlags,
-    IN  PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
-    IN  PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
-    OUT PKSFILTERFACTORY *FilterFactory OPTIONAL);
-
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ const KSFILTER_DESCRIPTOR *Descriptor,
+  _In_opt_ PWSTR RefString,
+  _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor,
+  _In_ ULONG CreateItemFlags,
+  _In_opt_ PFNKSFILTERFACTORYPOWER SleepCallback,
+  _In_opt_ PFNKSFILTERFACTORYPOWER WakeCallback,
+  _Out_opt_ PKSFILTERFACTORY *FilterFactory);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsFilterFactorySetDeviceClassesState(
-    IN PKSFILTERFACTORY FilterFactory,
-    IN BOOLEAN NewState
-    );
+  _In_ PKSFILTERFACTORY FilterFactory,
+  _In_ BOOLEAN NewState);
 
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsFilterFactoryUpdateCacheData(
-    IN PKSFILTERFACTORY FilterFactory,
-    IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL
-    );
+  _In_ PKSFILTERFACTORY FilterFactory,
+  _In_opt_ const KSFILTER_DESCRIPTOR *FilterDescriptor);
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
 KSDDKAPI
 PKSPIN
 NTAPI
 KsGetPinFromIrp(
-    IN PIRP Irp
-    );
+  _In_ PIRP Irp);
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
 KSDDKAPI
 PKSFILTER
 NTAPI
 KsGetFilterFromIrp(
-    IN PIRP Irp
-    );
+  _In_ PIRP Irp);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsDefaultAddEventHandler(
-    IN  PIRP Irp,
-    IN  PKSEVENTDATA EventData,
-    IN  OUT PKSEVENT_ENTRY EventEntry);
+  _In_ PIRP Irp,
+  _In_ PKSEVENTDATA EventData,
+  _Inout_ PKSEVENT_ENTRY EventEntry);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsDispatchQuerySecurity(
-    IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp
-    );
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsDispatchSetSecurity(
-    IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp
-    );
+  _In_ PDEVICE_OBJECT DeviceObject,
+  _In_ PIRP Irp);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PVOID
 NTAPI
 KsGetParent(
-    IN PVOID Object
-    );
-
+  _In_ PVOID Object);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 static
 PKSFILTERFACTORY
 __inline
 KsFilterGetParentFilterFactory(
-    IN PKSFILTER Filter
-    )
+    _In_ PKSFILTER Filter)
 {
     return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
 }
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 static
 PKSDEVICE
 __inline
 KsFilterFactoryGetParentDevice(
-    IN PKSFILTERFACTORY FilterFactory
-    )
+    _In_ PKSFILTERFACTORY FilterFactory)
 {
     return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
 }
 
-
-
-#define KsDeleteFilterFactory(FilterFactory)                                           \
-            KsFreeObjectCreateItemsByContext(                                          \
-            *(KSDEVICE_HEADER *)(                                                      \
-            KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->    \
-            DeviceExtension),                                                          \
+#define KsDeleteFilterFactory(FilterFactory) \
+            KsFreeObjectCreateItemsByContext( \
+            *(KSDEVICE_HEADER *)( \
+            KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
+            DeviceExtension), \
             FilterFactory)
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 ULONG
 NTAPI
 KsDeviceGetBusData(
-    IN  PKSDEVICE Device,
-    IN  ULONG DataType,
-    IN  PVOID Buffer,
-    IN  ULONG Offset,
-    IN  ULONG Length);
-
+  _In_ PKSDEVICE Device,
+  _In_ ULONG DataType,
+  _In_reads_bytes_(Length) PVOID Buffer,
+  _In_ ULONG Offset,
+  _In_ ULONG Length);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PVOID
 NTAPI
 KsGetFirstChild(
-    IN PVOID Object
-    );
+  _In_ PVOID Object);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PKSFILTERFACTORY
 NTAPI
 KsDeviceGetFirstChildFilterFactory(
-    IN  PKSDEVICE Device);
+  _In_ PKSDEVICE Device);
 
 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PUNKNOWN
 NTAPI
 KsGetOuterUnknown(
-    IN PVOID Object
-    );
+  _In_ PVOID Object);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 static
 __inline
 PUNKNOWN
 KsDeviceGetOuterUnknown(
-    IN  PKSDEVICE Device)
+    _In_ PKSDEVICE Device)
 {
     return KsGetOuterUnknown((PVOID) Device);
 }
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PUNKNOWN
 NTAPI
 KsDeviceRegisterAggregatedClientUnknown(
-    IN  PKSDEVICE Device,
-    IN  PUNKNOWN ClientUnknown);
-
+  _In_ PKSDEVICE Device,
+  _In_ PUNKNOWN ClientUnknown);
 
 #endif
 
@@ -4596,16 +4799,16 @@ DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
     STDMETHOD_(LONGLONG,GetPhysicalTime)(THIS
         ) PURE;
     STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
-        OUT PLONGLONG SystemTime
+        _Out_ PLONGLONG SystemTime
         ) PURE;
     STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
-        OUT PLONGLONG SystemTime
+        _Out_ PLONGLONG SystemTime
         ) PURE;
     STDMETHOD_(NTSTATUS, GetResolution)(THIS_
-        OUT PKSRESOLUTION Resolution
+        _Out_ PKSRESOLUTION Resolution
         ) PURE;
     STDMETHOD_(NTSTATUS, GetState)(THIS_
-        OUT PKSSTATE State
+        _Out_ PKSSTATE State
         ) PURE;
 };
 
@@ -4625,25 +4828,25 @@ DECLARE_INTERFACE_(IKsControl,IUnknown)
     STDMETHOD_(ULONG, Release)(THIS) PURE;
 
     STDMETHOD_(NTSTATUS, KsProperty)(THIS_
-        IN PKSPROPERTY Property,
-        IN ULONG PropertyLength,
-        IN OUT PVOID PropertyData,
-        IN ULONG DataLength,
-        OUT ULONG* BytesReturned
+        _In_reads_bytes_(PropertyLength) PKSPROPERTY Property,
+        _In_ ULONG PropertyLength,
+        _Inout_updates_bytes_(DataLength) PVOID PropertyData,
+        _In_ ULONG DataLength,
+        _Out_ ULONG *BytesReturned
         ) PURE;
     STDMETHOD_(NTSTATUS, KsMethod)(THIS_
-        IN PKSMETHOD Method,
-        IN ULONG MethodLength,
-        IN OUT PVOID MethodData,
-        IN ULONG DataLength,
-        OUT ULONG* BytesReturned
+        _In_reads_bytes_(MethodLength) PKSMETHOD Method,
+        _In_ ULONG MethodLength,
+        _Inout_updates_bytes_(DataLength) PVOID MethodData,
+        _In_ ULONG DataLength,
+        _Out_ ULONG *BytesReturned
         ) PURE;
     STDMETHOD_(NTSTATUS, KsEvent)(THIS_
-        IN PKSEVENT Event OPTIONAL,
-        IN ULONG EventLength,
-        IN OUT PVOID EventData,
-        IN ULONG DataLength,
-        OUT ULONG* BytesReturned
+        _In_reads_bytes_opt_(EventLength) PKSEVENT Event,
+        _In_ ULONG EventLength,
+        _Inout_updates_bytes_(DataLength) PVOID EventData,
+        _In_ ULONG DataLength,
+        _Out_ ULONG *BytesReturned
         ) PURE;
 };
 
@@ -4652,32 +4855,33 @@ typedef IKsControl* PIKSCONTROL;
 
 #endif
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsDeviceRegisterAdapterObject(
-    IN  PKSDEVICE Device,
-    IN  PADAPTER_OBJECT AdapterObject,
-    IN  ULONG MaxMappingByteCount,
-    IN  ULONG MappingTableStride);
+  _In_ PKSDEVICE Device,
+  _In_ PADAPTER_OBJECT AdapterObject,
+  _In_ ULONG MaxMappingByteCount,
+  _In_ ULONG MappingTableStride);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 ULONG
 NTAPI
 KsDeviceSetBusData(
-    IN  PKSDEVICE Device,
-    IN  ULONG DataType,
-    IN  PVOID Buffer,
-    IN  ULONG Offset,
-    IN  ULONG Length);
-
+  _In_ PKSDEVICE Device,
+  _In_ ULONG DataType,
+  _In_reads_bytes_(Length) PVOID Buffer,
+  _In_ ULONG Offset,
+  _In_ ULONG Length);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsReleaseControl(
-    IN PVOID Object
-    );
+  _In_ PVOID Object);
 
 #define KsDiscard(object, pointer) \
     KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
@@ -4691,49 +4895,54 @@ KsReleaseControl(
 #define KsFilterAddEvent(Filter, EventEntry) \
     KsAddEvent(Filter,EventEntry);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsFilterAcquireProcessingMutex(
-    IN  PKSFILTER Filter);
-
+  _In_ PKSFILTER Filter);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsFilterAddTopologyConnections(
-    IN  PKSFILTER Filter,
-    IN  ULONG NewConnectionsCount,
-    IN  const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);
+  _In_ PKSFILTER Filter,
+  _In_ ULONG NewConnectionsCount,
+  _In_reads_(NewConnectionsCount) const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
 KSDDKAPI
 VOID
 NTAPI
 KsFilterAttemptProcessing(
-    IN  PKSFILTER Filter,
-    IN  BOOLEAN Asynchronous);
+  _In_ PKSFILTER Filter,
+  _In_ BOOLEAN Asynchronous);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsFilterCreateNode(
-    IN  PKSFILTER Filter,
-    IN  const KSNODE_DESCRIPTOR *const NodeDescriptor,
-    OUT PULONG NodeID);
+  _In_ PKSFILTER Filter,
+  _In_ const KSNODE_DESCRIPTOR *const NodeDescriptor,
+  _Out_ PULONG NodeID);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 NTSTATUS
 NTAPI
 KsFilterCreatePinFactory(
-    IN  PKSFILTER Filter,
-    IN  const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
-    OUT PULONG PinID);
+  _In_ PKSFILTER Filter,
+  _In_ const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
+  _Out_ PULONG PinID);
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 KSDDKAPI
 PKSDEVICE
 __inline
 KsFilterFactoryGetDevice(
-    IN  PKSFILTERFACTORY FilterFactory);
+  _In_ PKSFILTERFACTORY FilterFactory);
 
 /* etc. */
 #endif /* avstream */
@@ -4742,4 +4951,4 @@ KsFilterFactoryGetDevice(
 }
 #endif
 
-#endif
+#endif /* _KS_ */
index 10c3151..5e162e9 100644 (file)
@@ -23,6 +23,8 @@
 #include <wincrypt.h>
 #endif
 
+#define MAX_GUID_CHARS 38
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -413,295 +415,1116 @@ typedef INT (CALLBACK *INSTALLUI_HANDLERW)(LPVOID, UINT, LPCWSTR);
 typedef INT (CALLBACK *INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE);
 typedef INSTALLUI_HANDLER_RECORD* PINSTALLUI_HANDLER_RECORD;
 
-UINT WINAPI MsiAdvertiseProductA(LPCSTR, LPCSTR, LPCSTR, LANGID);
-UINT WINAPI MsiAdvertiseProductW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID);
+UINT
+WINAPI
+MsiAdvertiseProductA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ LANGID);
+
+UINT
+WINAPI
+MsiAdvertiseProductW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ LANGID);
+
 #define     MsiAdvertiseProduct WINELIB_NAME_AW(MsiAdvertiseProduct)
 
-UINT WINAPI MsiAdvertiseProductExA(LPCSTR, LPCSTR, LPCSTR, LANGID, DWORD, DWORD);
-UINT WINAPI MsiAdvertiseProductExW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID, DWORD, DWORD);
+UINT
+WINAPI
+MsiAdvertiseProductExA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ LANGID,
+  _In_ DWORD,
+  _In_ DWORD);
+
+UINT
+WINAPI
+MsiAdvertiseProductExW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ LANGID,
+  _In_ DWORD,
+  _In_ DWORD);
+
 #define     MsiAdvertiseProductEx WINELIB_NAME_AW(MsiAdvertiseProductEx)
 
-UINT WINAPI MsiInstallProductA(LPCSTR, LPCSTR);
-UINT WINAPI MsiInstallProductW(LPCWSTR, LPCWSTR);
+UINT WINAPI MsiInstallProductA(_In_ LPCSTR, _In_opt_ LPCSTR);
+UINT WINAPI MsiInstallProductW(_In_ LPCWSTR, _In_opt_ LPCWSTR);
 #define     MsiInstallProduct WINELIB_NAME_AW(MsiInstallProduct)
 
-UINT WINAPI MsiReinstallProductA(LPCSTR, DWORD);
-UINT WINAPI MsiReinstallProductW(LPCWSTR, DWORD);
+UINT WINAPI MsiReinstallProductA(_In_ LPCSTR, _In_ DWORD);
+UINT WINAPI MsiReinstallProductW(_In_ LPCWSTR, _In_ DWORD);
 #define     MsiReinstallProduct WINELIB_NAME_AW(MsiReinstallProduct)
 
-UINT WINAPI MsiApplyPatchA(LPCSTR, LPCSTR, INSTALLTYPE, LPCSTR);
-UINT WINAPI MsiApplyPatchW(LPCWSTR, LPCWSTR, INSTALLTYPE, LPCWSTR);
+UINT
+WINAPI
+MsiApplyPatchA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ INSTALLTYPE,
+  _In_opt_ LPCSTR);
+
+UINT
+WINAPI
+MsiApplyPatchW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ INSTALLTYPE,
+  _In_opt_ LPCWSTR);
+
 #define     MsiApplyPatch WINELIB_NAME_AW(MsiApplyPatch)
 
 UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE, LPCSTR, DWORD, INSTALLSTATE, LPSTR, LPDWORD, LPINT, LPINT);
 UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE, LPCWSTR, DWORD, INSTALLSTATE, LPWSTR, LPDWORD, LPINT, LPINT);
 #define     MsiEnumComponentCosts WINELIB_NAME_AW(MsiEnumComponentCosts)
 
-UINT WINAPI MsiEnumProductsA(DWORD, LPSTR);
-UINT WINAPI MsiEnumProductsW(DWORD, LPWSTR);
+UINT
+WINAPI
+MsiEnumProductsA(
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiEnumProductsW(
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
+
 #define     MsiEnumProducts WINELIB_NAME_AW(MsiEnumProducts)
 
-UINT WINAPI MsiEnumProductsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR[39], MSIINSTALLCONTEXT*, LPSTR, LPDWORD);
-UINT WINAPI MsiEnumProductsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR[39], MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiEnumProductsExA(
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) CHAR[39],
+  _Out_opt_ MSIINSTALLCONTEXT*,
+  _Out_writes_opt_(*pcchSid) LPSTR,
+  _Inout_opt_ LPDWORD pcchSid);
+
+UINT
+WINAPI
+MsiEnumProductsExW(
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) WCHAR[39],
+  _Out_opt_ MSIINSTALLCONTEXT*,
+  _Out_writes_opt_(*pcchSid) LPWSTR,
+  _Inout_opt_ LPDWORD pcchSid);
+
 #define     MsiEnumProductsEx WINELIB_NAME_AW(MsiEnumProductsEx)
 
-UINT WINAPI MsiEnumFeaturesA(LPCSTR, DWORD, LPSTR, LPSTR);
-UINT WINAPI MsiEnumFeaturesW(LPCWSTR, DWORD, LPWSTR, LPWSTR);
+UINT
+WINAPI
+MsiEnumFeaturesA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Out_writes_(MAX_FEATURE_CHARS + 1) LPSTR,
+  _Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiEnumFeaturesW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Out_writes_(MAX_FEATURE_CHARS + 1) LPWSTR,
+  _Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPWSTR);
+
 #define     MsiEnumFeatures WINELIB_NAME_AW(MsiEnumFeatures)
 
-UINT WINAPI MsiEnumComponentsA(DWORD, LPSTR);
-UINT WINAPI MsiEnumComponentsW(DWORD, LPWSTR);
+UINT
+WINAPI
+MsiEnumComponentsA(
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiEnumComponentsW(
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
+
 #define     MsiEnumComponents WINELIB_NAME_AW(MsiEnumComponents)
 
-UINT WINAPI MsiEnumComponentsExA(LPCSTR, DWORD, DWORD, CHAR[39],
-                                 MSIINSTALLCONTEXT *, LPSTR, LPDWORD);
-UINT WINAPI MsiEnumComponentsExW(LPCWSTR, DWORD, DWORD, WCHAR[39],
-                                 MSIINSTALLCONTEXT *, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiEnumComponentsExA(
+  _In_opt_ LPCSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) CHAR[39],
+  _Out_opt_ MSIINSTALLCONTEXT *,
+  _Out_writes_opt_(*pcchSid) LPSTR,
+  _Inout_opt_ LPDWORD pcchSid);
+
+UINT
+WINAPI
+MsiEnumComponentsExW(
+  _In_opt_ LPCWSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) WCHAR[39],
+  _Out_opt_ MSIINSTALLCONTEXT *,
+  _Out_writes_opt_(*pcchSid) LPWSTR,
+  _Inout_opt_ LPDWORD pcchSid);
+
 #define     MsiEnumComponentsEx WINELIB_NAME_AW(MsiEnumComponentsEx)
 
-UINT WINAPI MsiEnumClientsA(LPCSTR, DWORD, LPSTR);
-UINT WINAPI MsiEnumClientsW(LPCWSTR, DWORD, LPWSTR);
+UINT
+WINAPI
+MsiEnumClientsA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiEnumClientsW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
+
 #define     MsiEnumClients WINELIB_NAME_AW(MsiEnumClients)
 
-UINT WINAPI MsiOpenPackageA(LPCSTR, MSIHANDLE*);
-UINT WINAPI MsiOpenPackageW(LPCWSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenPackageA(_In_ LPCSTR, _Out_ MSIHANDLE*);
+UINT WINAPI MsiOpenPackageW(_In_ LPCWSTR, _Out_ MSIHANDLE*);
 #define     MsiOpenPackage WINELIB_NAME_AW(MsiOpenPackage)
 
-UINT WINAPI MsiOpenPackageExA(LPCSTR, DWORD, MSIHANDLE*);
-UINT WINAPI MsiOpenPackageExW(LPCWSTR, DWORD, MSIHANDLE*);
+UINT WINAPI MsiOpenPackageExA(_In_ LPCSTR, _In_ DWORD, _Out_ MSIHANDLE*);
+UINT WINAPI MsiOpenPackageExW(_In_ LPCWSTR, _In_ DWORD, _Out_ MSIHANDLE*);
 #define     MsiOpenPackageEx WINELIB_NAME_AW(MsiOpenPackageEx)
 
-UINT WINAPI MsiOpenProductA(LPCSTR, MSIHANDLE*);
-UINT WINAPI MsiOpenProductW(LPCWSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenProductA(_In_ LPCSTR, _Out_ MSIHANDLE*);
+UINT WINAPI MsiOpenProductW(_In_ LPCWSTR, _Out_ MSIHANDLE*);
 #define     MsiOpenProduct WINELIB_NAME_AW(MsiOpenProduct)
 
-UINT WINAPI MsiGetProductPropertyA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
-UINT WINAPI MsiGetProductPropertyW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+UINT
+WINAPI
+MsiGetProductPropertyA(
+  _In_ MSIHANDLE,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchValueBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchValueBuf);
+
+UINT
+WINAPI
+MsiGetProductPropertyW(
+  _In_ MSIHANDLE,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchValueBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValueBuf);
+
 #define     MsiGetProductProperty WINELIB_NAME_AW(MsiGetProductProperty)
 
-UINT WINAPI MsiVerifyPackageA(LPCSTR);
-UINT WINAPI MsiVerifyPackageW(LPCWSTR);
+UINT WINAPI MsiVerifyPackageA(_In_ LPCSTR);
+UINT WINAPI MsiVerifyPackageW(_In_ LPCWSTR);
 #define     MsiVerifyPackage WINELIB_NAME_AW(MsiVerifyPackage)
 
-UINT WINAPI MsiQueryComponentStateA(LPCSTR,LPCSTR,MSIINSTALLCONTEXT,LPCSTR,INSTALLSTATE*);
-UINT WINAPI MsiQueryComponentStateW(LPCWSTR,LPCWSTR,MSIINSTALLCONTEXT,LPCWSTR,INSTALLSTATE*);
+UINT
+WINAPI
+MsiQueryComponentStateA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCSTR,
+  _Out_opt_ INSTALLSTATE*);
+
+UINT
+WINAPI
+MsiQueryComponentStateW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCWSTR,
+  _Out_opt_ INSTALLSTATE*);
+
 #define     MsiQueryComponentState WINELIB_NAME_AW(MsiQueryComponentState)
 
-INSTALLSTATE WINAPI MsiQueryProductStateA(LPCSTR);
-INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR);
+INSTALLSTATE WINAPI MsiQueryProductStateA(_In_ LPCSTR);
+INSTALLSTATE WINAPI MsiQueryProductStateW(_In_ LPCWSTR);
 #define      MsiQueryProductState WINELIB_NAME_AW(MsiQueryProductState)
 
-UINT WINAPI MsiConfigureProductA(LPCSTR, int, INSTALLSTATE);
-UINT WINAPI MsiConfigureProductW(LPCWSTR, int, INSTALLSTATE);
+UINT WINAPI MsiConfigureProductA(_In_ LPCSTR, _In_ int, _In_ INSTALLSTATE);
+UINT WINAPI MsiConfigureProductW(_In_ LPCWSTR, _In_ int, _In_ INSTALLSTATE);
 #define     MsiConfigureProduct WINELIB_NAME_AW(MsiConfigureProduct);
 
-UINT WINAPI MsiConfigureProductExA(LPCSTR, int, INSTALLSTATE, LPCSTR);
-UINT WINAPI MsiConfigureProductExW(LPCWSTR, int, INSTALLSTATE, LPCWSTR);
+UINT
+WINAPI
+MsiConfigureProductExA(
+  _In_ LPCSTR,
+  _In_ int,
+  _In_ INSTALLSTATE,
+  _In_opt_ LPCSTR);
+
+UINT
+WINAPI
+MsiConfigureProductExW(
+  _In_ LPCWSTR,
+  _In_ int,
+  _In_ INSTALLSTATE,
+  _In_opt_ LPCWSTR);
+
 #define     MsiConfigureProductEx WINELIB_NAME_AW(MsiConfigureProductEx);
 
-UINT WINAPI MsiConfigureFeatureA(LPCSTR, LPCSTR, INSTALLSTATE);
-UINT WINAPI MsiConfigureFeatureW(LPCWSTR, LPCWSTR, INSTALLSTATE);
+UINT
+WINAPI
+MsiConfigureFeatureA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ INSTALLSTATE);
+
+UINT
+WINAPI
+MsiConfigureFeatureW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ INSTALLSTATE);
+
 #define     MsiConfigureFeature WINELIB_NAME_AW(MsiConfigureFeature);
 
-UINT WINAPI MsiGetProductCodeA(LPCSTR, LPSTR);
-UINT WINAPI MsiGetProductCodeW(LPCWSTR, LPWSTR);
+UINT
+WINAPI
+MsiGetProductCodeA(
+  _In_ LPCSTR,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiGetProductCodeW(
+  _In_ LPCWSTR,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
+
 #define     MsiGetProductCode WINELIB_NAME_AW(MsiGetProductCode)
 
-UINT WINAPI MsiGetProductInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
-UINT WINAPI MsiGetProductInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiGetProductInfoA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchValueBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchValueBuf);
+
+UINT
+WINAPI
+MsiGetProductInfoW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchValueBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValueBuf);
+
 #define     MsiGetProductInfo WINELIB_NAME_AW(MsiGetProductInfo)
 
-UINT WINAPI MsiGetProductInfoExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);
-UINT WINAPI MsiGetProductInfoExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiGetProductInfoExA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchValue) LPSTR,
+  _Inout_opt_ LPDWORD pcchValue);
+
+UINT
+WINAPI
+MsiGetProductInfoExW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchValue) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValue);
+
 #define     MsiGetProductInfoEx WINELIB_NAME_AW(MsiGetProductInfoEx)
 
-UINT WINAPI MsiGetPatchInfoExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);
-UINT WINAPI MsiGetPatchInfoExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiGetPatchInfoExA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchValue) LPSTR,
+  _Inout_opt_ LPDWORD pcchValue);
+
+UINT
+WINAPI
+MsiGetPatchInfoExW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchValue) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValue);
+
 #define     MsiGetPatchInfoEx WINELIB_NAME_AW(MsiGetPatchInfoEx)
 
-UINT WINAPI MsiGetPatchInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
-UINT WINAPI MsiGetPatchInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiGetPatchInfoA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchValueBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchValueBuf);
+
+UINT
+WINAPI
+MsiGetPatchInfoW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchValueBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValueBuf);
+
 #define     MsiGetPatchInfo WINELIB_NAME_AW(MsiGetPatchInfo)
 
-UINT WINAPI MsiEnableLogA(DWORD, LPCSTR, DWORD);
-UINT WINAPI MsiEnableLogW(DWORD, LPCWSTR, DWORD);
+UINT WINAPI MsiEnableLogA(_In_ DWORD, _In_opt_ LPCSTR, _In_ DWORD);
+UINT WINAPI MsiEnableLogW(_In_ DWORD, _In_opt_ LPCWSTR, _In_ DWORD);
 #define     MsiEnableLog WINELIB_NAME_AW(MsiEnableLog)
 
-INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA, DWORD, LPVOID);
-INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW, DWORD, LPVOID);
+INSTALLUI_HANDLERA
+WINAPI
+MsiSetExternalUIA(
+  _In_opt_ INSTALLUI_HANDLERA,
+  _In_ DWORD,
+  _In_opt_ LPVOID);
+
+INSTALLUI_HANDLERW
+WINAPI
+MsiSetExternalUIW(
+  _In_opt_ INSTALLUI_HANDLERW,
+  _In_ DWORD,
+  _In_opt_ LPVOID);
+
 #define MsiSetExternalUI WINELIB_NAME_AW(MsiSetExternalUI)
 
-INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
-INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+INSTALLSTATE
+WINAPI
+MsiGetComponentPathA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchBuf);
+
+INSTALLSTATE
+WINAPI
+MsiGetComponentPathW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchBuf);
+
 #define MsiGetComponentPath WINELIB_NAME_AW(MsiGetComponentPath)
 
-INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR, LPCSTR);
-INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR, LPCWSTR);
+INSTALLSTATE WINAPI MsiQueryFeatureStateA(_In_ LPCSTR, _In_ LPCSTR);
+INSTALLSTATE WINAPI MsiQueryFeatureStateW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define MsiQueryFeatureState WINELIB_NAME_AW(MsiQueryFeatureState)
 
-UINT WINAPI MsiQueryFeatureStateExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*);
-UINT WINAPI MsiQueryFeatureStateExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, INSTALLSTATE*);
+UINT
+WINAPI
+MsiQueryFeatureStateExA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCSTR,
+  _Out_opt_ INSTALLSTATE*);
+
+UINT
+WINAPI
+MsiQueryFeatureStateExW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ LPCWSTR,
+  _Out_opt_ INSTALLSTATE*);
+
 #define     MsiQueryFeatureStateEx WINELIB_NAME_AW(MsiQueryFeatureStateEx)
 
-UINT WINAPI MsiGetFeatureInfoA(MSIHANDLE, LPCSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiGetFeatureInfoW(MSIHANDLE, LPCWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiGetFeatureInfoA(
+  _In_ MSIHANDLE,
+  _In_ LPCSTR,
+  _Out_opt_ LPDWORD,
+  _Out_writes_opt_(*pcchTitleBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchTitleBuf,
+  _Out_writes_opt_(*pcchHelpBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchHelpBuf);
+
+UINT
+WINAPI
+MsiGetFeatureInfoW(
+  _In_ MSIHANDLE,
+  _In_ LPCWSTR,
+  _Out_opt_ LPDWORD,
+  _Out_writes_opt_(*pcchTitleBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchTitleBuf,
+  _Out_writes_opt_(*pcchHelpBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchHelpBuf);
+
 #define MsiGetFeatureInfo WINELIB_NAME_AW(MsiGetFeatureInfo)
 
-UINT WINAPI MsiGetFeatureUsageA(LPCSTR, LPCSTR, LPDWORD, LPWORD);
-UINT WINAPI MsiGetFeatureUsageW(LPCWSTR, LPCWSTR, LPDWORD, LPWORD);
+UINT
+WINAPI
+MsiGetFeatureUsageA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPWORD);
+
+UINT
+WINAPI
+MsiGetFeatureUsageW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPWORD);
+
 #define MsiGetFeatureUsage WINELIB_NAME_AW(MsiGetFeatureUsage)
 
-UINT WINAPI MsiEnumRelatedProductsA(LPCSTR, DWORD, DWORD, LPSTR);
-UINT WINAPI MsiEnumRelatedProductsW(LPCWSTR, DWORD, DWORD, LPWSTR);
+UINT
+WINAPI
+MsiEnumRelatedProductsA(
+  _In_ LPCSTR,
+  _Reserved_ DWORD,
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiEnumRelatedProductsW(
+  _In_ LPCWSTR,
+  _Reserved_ DWORD,
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
+
 #define MsiEnumRelatedProducts WINELIB_NAME_AW(MsiEnumRelatedProducts)
 
-UINT WINAPI MsiProvideAssemblyA(LPCSTR, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiProvideAssemblyW(LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiProvideAssemblyA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchPathBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchPathBuf);
+
+UINT
+WINAPI
+MsiProvideAssemblyW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchPathBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchPathBuf);
+
 #define MsiProvideAssembly WINELIB_NAME_AW(MsiProvideAssembly)
 
-UINT WINAPI MsiEnumComponentQualifiersA(LPCSTR, DWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiEnumComponentQualifiersW(LPCWSTR, DWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiEnumComponentQualifiersA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Out_writes_(*pcchQualifierBuf) LPSTR,
+  _Inout_ LPDWORD pcchQualifierBuf,
+  _Out_writes_opt_(*pcchApplicationDataBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchApplicationDataBuf);
+
+UINT
+WINAPI
+MsiEnumComponentQualifiersW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Out_writes_(*pcchQualifierBuf) LPWSTR,
+  _Inout_ LPDWORD pcchQualifierBuf,
+  _Out_writes_opt_(*pcchApplicationDataBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchApplicationDataBuf);
+
 #define MsiEnumComponentQualifiers WINELIB_NAME_AW(MsiEnumComponentQualifiers)
 
-UINT WINAPI MsiGetFileVersionA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiGetFileVersionW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiGetFileVersionA(
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchVersionBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchVersionBuf,
+  _Out_writes_opt_(*pcchLangBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchLangBuf);
+
+UINT
+WINAPI
+MsiGetFileVersionW(
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchVersionBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchVersionBuf,
+  _Out_writes_opt_(*pcchLangBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchLangBuf);
+
 #define MsiGetFileVersion WINELIB_NAME_AW(MsiGetFileVersion)
 
 UINT WINAPI MsiMessageBoxA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);
 UINT WINAPI MsiMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);
 #define MsiMessageBox WINELIB_NAME_AW(MsiMessageBox)
 
-UINT WINAPI MsiProvideQualifiedComponentExA(LPCSTR, LPCSTR, DWORD, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiProvideQualifiedComponentExA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _In_opt_ LPCSTR,
+  _Reserved_ DWORD,
+  _Reserved_ DWORD,
+  _Out_writes_opt_(*pcchPathBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchPathBuf);
+
+UINT
+WINAPI
+MsiProvideQualifiedComponentExW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _In_opt_ LPCWSTR,
+  _Reserved_ DWORD,
+  _Reserved_ DWORD,
+  _Out_writes_opt_(*pcchPathBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchPathBuf);
+
 #define MsiProvideQualifiedComponentEx WINELIB_NAME_AW(MsiProvideQualifiedComponentEx)
 
-UINT WINAPI MsiProvideQualifiedComponentA(LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiProvideQualifiedComponentW(LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiProvideQualifiedComponentA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchPathBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchPathBuf);
+
+UINT
+WINAPI
+MsiProvideQualifiedComponentW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchPathBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchPathBuf);
+
 #define MsiProvideQualifiedComponent WINELIB_NAME_AW(MsiProvideQualifiedComponent)
 
-USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
-USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+USERINFOSTATE
+WINAPI
+MsiGetUserInfoA(
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchUserNameBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchUserNameBuf,
+  _Out_writes_opt_(*pcchOrgNameBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchOrgNameBuf,
+  _Out_writes_opt_(*pcchSerialBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchSerialBuf);
+
+USERINFOSTATE
+WINAPI
+MsiGetUserInfoW(
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchUserNameBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchUserNameBuf,
+  _Out_writes_opt_(*pcchOrgNameBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchOrgNameBuf,
+  _Out_writes_opt_(*pcchSerialBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchSerialBuf);
+
 #define MsiGetUserInfo WINELIB_NAME_AW(MsiGetUserInfo)
 
-UINT WINAPI MsiCollectUserInfoA(LPCSTR);
-UINT WINAPI MsiCollectUserInfoW(LPCWSTR);
+UINT WINAPI MsiCollectUserInfoA(_In_ LPCSTR);
+UINT WINAPI MsiCollectUserInfoW(_In_ LPCWSTR);
 #define MsiCollectUserInfo WINELIB_NAME_AW(MsiCollectUserInfo)
 
-UINT WINAPI MsiReinstallFeatureA(LPCSTR, LPCSTR, DWORD);
-UINT WINAPI MsiReinstallFeatureW(LPCWSTR, LPCWSTR, DWORD);
+UINT WINAPI MsiReinstallFeatureA(_In_ LPCSTR, _In_ LPCSTR, _In_ DWORD);
+UINT WINAPI MsiReinstallFeatureW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD);
 #define MsiReinstallFeature WINELIB_NAME_AW(MsiReinstallFeature)
 
-UINT WINAPI MsiGetShortcutTargetA(LPCSTR, LPSTR, LPSTR, LPSTR);
-UINT WINAPI MsiGetShortcutTargetW(LPCWSTR, LPWSTR, LPWSTR, LPWSTR);
+UINT
+WINAPI
+MsiGetShortcutTargetA(
+  _In_ LPCSTR,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR,
+  _Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPSTR,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR);
+
+UINT
+WINAPI
+MsiGetShortcutTargetW(
+  _In_ LPCWSTR,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR,
+  _Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPWSTR,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR);
+
 #define MsiGetShortcutTarget WINELIB_NAME_AW(MsiGetShortcutTarget)
 
-INSTALLSTATE WINAPI MsiUseFeatureW(LPCWSTR, LPCWSTR);
-INSTALLSTATE WINAPI MsiUseFeatureA(LPCSTR, LPCSTR);
+INSTALLSTATE WINAPI MsiUseFeatureW(_In_ LPCWSTR, _In_ LPCWSTR);
+INSTALLSTATE WINAPI MsiUseFeatureA(_In_ LPCSTR, _In_ LPCSTR);
 #define MsiUseFeature WINELIB_NAME_AW(MsiUseFeature)
 
-INSTALLSTATE WINAPI MsiUseFeatureExW(LPCWSTR, LPCWSTR, DWORD, DWORD);
-INSTALLSTATE WINAPI MsiUseFeatureExA(LPCSTR, LPCSTR, DWORD, DWORD);
+INSTALLSTATE
+WINAPI
+MsiUseFeatureExW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Reserved_ DWORD);
+
+INSTALLSTATE
+WINAPI
+MsiUseFeatureExA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Reserved_ DWORD);
+
 #define MsiUseFeatureEx WINELIB_NAME_AW(MsiUseFeatureEx)
 
-HRESULT WINAPI MsiGetFileSignatureInformationA(LPCSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);
-HRESULT WINAPI MsiGetFileSignatureInformationW(LPCWSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);
+HRESULT
+WINAPI
+MsiGetFileSignatureInformationA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Outptr_ PCCERT_CONTEXT*,
+  _Out_writes_bytes_opt_(*pcbHashData) LPBYTE,
+  _Inout_opt_ LPDWORD pcbHashData);
+
+HRESULT
+WINAPI
+MsiGetFileSignatureInformationW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Outptr_ PCCERT_CONTEXT*,
+  _Out_writes_bytes_opt_(*pcbHashData) LPBYTE,
+  _Inout_opt_ LPDWORD pcbHashData);
+
 #define MsiGetFileSignatureInformation WINELIB_NAME_AW(MsiGetFileSignatureInformation)
 
-INSTALLSTATE WINAPI MsiLocateComponentA(LPCSTR, LPSTR, LPDWORD);
-INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR, LPWSTR, LPDWORD);
+INSTALLSTATE
+WINAPI
+MsiLocateComponentA(
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchBuf) LPSTR,
+  _Inout_opt_ LPDWORD pcchBuf);
+
+INSTALLSTATE
+WINAPI
+MsiLocateComponentW(
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchBuf) LPWSTR,
+  _Inout_opt_ LPDWORD pcchBuf);
+
 #define  MsiLocateComponent WINELIB_NAME_AW(MsiLocateComponent)
 
-UINT WINAPI MsiSourceListAddSourceA(LPCSTR, LPCSTR, DWORD, LPCSTR);
-UINT WINAPI MsiSourceListAddSourceW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR);
+UINT
+WINAPI
+MsiSourceListAddSourceA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Reserved_ DWORD,
+  _In_ LPCSTR);
+
+UINT
+WINAPI
+MsiSourceListAddSourceW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Reserved_ DWORD,
+  _In_ LPCWSTR);
+
 #define     MsiSourceListAddSource WINELIB_NAME_AW(MsiSourceListAddSource)
 
-UINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,
-                                         LPSTR, LPDWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,
-                                         LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiSourceListEnumMediaDisksA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_opt_ LPDWORD,
+  _Out_writes_opt_(*pcchVolumeLabel) LPSTR,
+  _Inout_opt_ LPDWORD pcchVolumeLabel,
+  _Out_writes_opt_(*pcchDiskPrompt) LPSTR,
+  _Inout_opt_ LPDWORD pcchDiskPrompt);
+
+UINT
+WINAPI
+MsiSourceListEnumMediaDisksW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_opt_ LPDWORD,
+  _Out_writes_opt_(*pcchVolumeLabel) LPWSTR,
+  _Inout_opt_ LPDWORD pcchVolumeLabel,
+  _Out_writes_opt_(*pcchDiskPrompt) LPWSTR,
+  _Inout_opt_ LPDWORD pcchDiskPrompt);
+
 #define     MsiSourceListEnumMediaDisks WINELIB_NAME_AW(MsiSourceListEnumMediaDisks)
 
-UINT WINAPI MsiSourceListEnumSourcesA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD);
-UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiSourceListEnumSourcesA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchSource) LPSTR,
+  _Inout_opt_ LPDWORD pcchSource);
+
+UINT
+WINAPI
+MsiSourceListEnumSourcesW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchSource) LPWSTR,
+  _Inout_opt_ LPDWORD pcchSource);
+
 #define     MsiSourceListEnumSources WINELIB_NAME_AW(MsiSourceListEnumSources)
 
-UINT WINAPI MsiSourceListClearSourceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR);
-UINT WINAPI MsiSourceListClearSourceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR);
+UINT
+WINAPI
+MsiSourceListClearSourceA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCSTR);
+
+UINT
+WINAPI
+MsiSourceListClearSourceW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCWSTR);
+
 #define     MsiSourceListClearSource WINELIB_NAME_AW(MsiSourceListClearSource)
 
-UINT WINAPI MsiSourceListClearAllA(LPCSTR, LPCSTR, DWORD);
-UINT WINAPI MsiSourceListClearAllW(LPCWSTR, LPCWSTR, DWORD);
+UINT
+WINAPI
+MsiSourceListClearAllA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Reserved_ DWORD);
+
+UINT
+WINAPI
+MsiSourceListClearAllW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Reserved_ DWORD);
+
 #define     MsiSourceListClearAll WINELIB_NAME_AW(MsiSourceListClearAll)
 
-UINT WINAPI MsiSourceListGetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);
-UINT WINAPI MsiSourceListGetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiSourceListGetInfoA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCSTR,
+  _Out_writes_opt_(*pcchValue) LPSTR,
+  _Inout_opt_ LPDWORD pcchValue);
+
+UINT
+WINAPI
+MsiSourceListGetInfoW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(*pcchValue) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValue);
+
 #define     MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo)
 
-UINT WINAPI MsiSourceListSetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPCSTR);
-UINT WINAPI MsiSourceListSetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPCWSTR);
+UINT
+WINAPI
+MsiSourceListSetInfoA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCSTR,
+  _In_ LPCSTR);
+
+UINT
+WINAPI
+MsiSourceListSetInfoW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCWSTR,
+  _In_ LPCWSTR);
+
 #define     MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo)
 
-UINT WINAPI MsiSourceListAddSourceExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD);
-UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, DWORD);
+UINT
+WINAPI
+MsiSourceListAddSourceExA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCSTR,
+  _In_ DWORD);
+
+UINT
+WINAPI
+MsiSourceListAddSourceExW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ LPCWSTR,
+  _In_ DWORD);
+
 #define     MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx)
 
-UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR);
-UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCWSTR, LPCWSTR);
+UINT
+WINAPI
+MsiSourceListAddMediaDiskA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR);
+
+UINT
+WINAPI
+MsiSourceListAddMediaDiskW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR);
+
 #define     MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk)
 
-UINT WINAPI MsiEnumPatchesA(LPCSTR, DWORD, LPSTR, LPSTR, LPDWORD);
-UINT WINAPI MsiEnumPatchesW(LPCWSTR, DWORD, LPWSTR, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiEnumPatchesA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPSTR,
+  _Out_writes_(*pcchTransformsBuf) LPSTR,
+  _Inout_ LPDWORD pcchTransformsBuf);
+
+UINT
+WINAPI
+MsiEnumPatchesW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Out_writes_(MAX_GUID_CHARS + 1) LPWSTR,
+  _Out_writes_(*pcchTransformsBuf) LPWSTR,
+  _Inout_ LPDWORD pcchTransformsBuf);
+
 #define     MsiEnumPatches WINELIB_NAME_AW(MsiEnumPatches)
 
-UINT WINAPI MsiEnumPatchesExA(LPCSTR, LPCSTR, DWORD, DWORD, DWORD, LPSTR, LPSTR,
-                              MSIINSTALLCONTEXT*, LPSTR, LPDWORD);
-UINT WINAPI MsiEnumPatchesExW(LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, LPWSTR, LPWSTR,
-                              MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);
+UINT
+WINAPI
+MsiEnumPatchesExA(
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR,
+  _Out_opt_ MSIINSTALLCONTEXT*,
+  _Out_writes_opt_(*pcchTargetUserSid) LPSTR,
+  _Inout_opt_ LPDWORD pcchTargetUserSid);
+
+UINT
+WINAPI
+MsiEnumPatchesExW(
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR,
+  _Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR,
+  _Out_opt_ MSIINSTALLCONTEXT*,
+  _Out_writes_opt_(*pcchTargetUserSid) LPWSTR,
+  _Inout_opt_ LPDWORD pcchTargetUserSid);
+
 #define     MsiEnumPatchesEx WINELIB_NAME_AW(MsiEnumPatchesEx)
 
-UINT WINAPI MsiGetFileHashA(LPCSTR, DWORD, PMSIFILEHASHINFO);
-UINT WINAPI MsiGetFileHashW(LPCWSTR, DWORD, PMSIFILEHASHINFO);
+UINT
+WINAPI
+MsiGetFileHashA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Inout_ PMSIFILEHASHINFO);
+
+UINT
+WINAPI
+MsiGetFileHashW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Inout_ PMSIFILEHASHINFO);
+
 #define     MsiGetFileHash WINELIB_NAME_AW(MsiGetFileHash)
 
-UINT WINAPI MsiAdvertiseScriptA(LPCSTR, DWORD, PHKEY, BOOL);
-UINT WINAPI MsiAdvertiseScriptW(LPCWSTR, DWORD, PHKEY, BOOL);
+UINT
+WINAPI
+MsiAdvertiseScriptA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _In_opt_ PHKEY,
+  _In_ BOOL);
+
+UINT
+WINAPI
+MsiAdvertiseScriptW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _In_opt_ PHKEY,
+  _In_ BOOL);
+
 #define     MsiAdvertiseScript WINELIB_NAME_AW(MsiAdvertiseScript)
 
-UINT WINAPI MsiIsProductElevatedA(LPCSTR, BOOL *);
-UINT WINAPI MsiIsProductElevatedW(LPCWSTR, BOOL *);
+UINT WINAPI MsiIsProductElevatedA(_In_ LPCSTR, _Out_ BOOL *);
+UINT WINAPI MsiIsProductElevatedW(_In_ LPCWSTR, _Out_ BOOL *);
 #define     MsiIsProductElevated WINELIB_NAME_AW(MsiIsProductElevated)
 
 UINT WINAPI MsiDatabaseMergeA(MSIHANDLE, MSIHANDLE, LPCSTR);
 UINT WINAPI MsiDatabaseMergeW(MSIHANDLE, MSIHANDLE, LPCWSTR);
 #define     MsiDatabaseMerge WINELIB_NAME_AW(MsiDatabaseMerge)
 
-UINT WINAPI MsiInstallMissingComponentA(LPCSTR, LPCSTR, INSTALLSTATE);
-UINT WINAPI MsiInstallMissingComponentW(LPCWSTR, LPCWSTR, INSTALLSTATE);
+UINT
+WINAPI
+MsiInstallMissingComponentA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ INSTALLSTATE);
+
+UINT
+WINAPI
+MsiInstallMissingComponentW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ INSTALLSTATE);
+
 #define     MsiInstallMissingComponent WINELIB_NAME_AW(MsiInstallMissingComponent)
 
-UINT WINAPI MsiDetermineApplicablePatchesA(LPCSTR, DWORD, PMSIPATCHSEQUENCEINFOA);
-UINT WINAPI MsiDetermineApplicablePatchesW(LPCWSTR, DWORD, PMSIPATCHSEQUENCEINFOW);
+UINT
+WINAPI
+MsiDetermineApplicablePatchesA(
+  _In_ LPCSTR,
+  _In_ DWORD cPatchInfo,
+  _Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOA);
+
+UINT
+WINAPI
+MsiDetermineApplicablePatchesW(
+  _In_ LPCWSTR,
+  _In_ DWORD cPatchInfo,
+  _Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOW);
+
 #define     MsiDetermineApplicablePatches WINELIB_NAME_AW(MsiDetermineApplicablePatches)
 
-UINT WINAPI MsiDeterminePatchSequenceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOA);
-UINT WINAPI MsiDeterminePatchSequenceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOW);
+UINT
+WINAPI
+MsiDeterminePatchSequenceA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD cPatchInfo,
+  _Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOA);
+
+UINT
+WINAPI
+MsiDeterminePatchSequenceW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ MSIINSTALLCONTEXT,
+  _In_ DWORD cPatchInfo,
+  _Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOW);
+
 #define     MsiDeterminePatchSequence WINELIB_NAME_AW(MsiDeterminePatchSequence)
 
-UINT WINAPI MsiApplyMultiplePatchesA(LPCSTR, LPCSTR, LPCSTR);
-UINT WINAPI MsiApplyMultiplePatchesW(LPCWSTR, LPCWSTR, LPCWSTR);
+UINT
+WINAPI
+MsiApplyMultiplePatchesA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR);
+
+UINT
+WINAPI
+MsiApplyMultiplePatchesW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR);
+
 #define     MsiApplyMultiplePatches WINELIB_NAME_AW(MsiApplyMultiplePatches)
 
-UINT WINAPI MsiBeginTransactionA(LPCSTR, DWORD, MSIHANDLE *, HANDLE *);
-UINT WINAPI MsiBeginTransactionW(LPCWSTR, DWORD, MSIHANDLE *, HANDLE *);
+UINT
+WINAPI
+MsiBeginTransactionA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Out_ MSIHANDLE *,
+  _Out_ HANDLE *);
+
+UINT
+WINAPI
+MsiBeginTransactionW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Out_ MSIHANDLE *,
+  _Out_ HANDLE *);
+
 #define     MsiBeginTransaction WINELIB_NAME_AW(MsiBeginTransaction)
 
-UINT WINAPI MsiEndTransaction(DWORD);
+UINT WINAPI MsiEndTransaction(_In_ DWORD);
 
 /* Non Unicode */
 UINT WINAPI MsiCloseHandle(MSIHANDLE);
 UINT WINAPI MsiCloseAllHandles(void);
-INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL, HWND*);
-UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD, DWORD, LPVOID, PINSTALLUI_HANDLER_RECORD);
+INSTALLUILEVEL WINAPI MsiSetInternalUI(_In_ INSTALLUILEVEL, _Inout_opt_ HWND*);
+
+UINT
+WINAPI
+MsiSetExternalUIRecord(
+  _In_opt_ INSTALLUI_HANDLER_RECORD,
+  _In_ DWORD,
+  _In_opt_ LPVOID,
+  _Out_opt_ PINSTALLUI_HANDLER_RECORD);
 
 #ifdef __cplusplus
 }
index e9295de..1db973d 100644 (file)
@@ -322,37 +322,108 @@ typedef enum tagCOINIT
     COINIT_SPEED_OVER_MEMORY  = 0x8  /* Trade memory for speed */
 } COINIT;
 
-HRESULT WINAPI CoInitialize(LPVOID lpReserved);
-HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit);
+_Check_return_ HRESULT WINAPI CoInitialize(_In_opt_ LPVOID lpReserved);
+
+_Check_return_
+HRESULT
+WINAPI
+CoInitializeEx(
+  _In_opt_ LPVOID lpReserved,
+  _In_ DWORD dwCoInit);
+
 void WINAPI CoUninitialize(void);
 DWORD WINAPI CoGetCurrentProcess(void);
 
-HINSTANCE WINAPI CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree);
+HINSTANCE WINAPI CoLoadLibrary(_In_ LPOLESTR lpszLibName, _In_ BOOL bAutoFree);
 void WINAPI CoFreeAllLibraries(void);
-void WINAPI CoFreeLibrary(HINSTANCE hLibrary);
+void WINAPI CoFreeLibrary(_In_ HINSTANCE hLibrary);
 void WINAPI CoFreeUnusedLibraries(void);
-void WINAPI CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD dwReserved);
 
-HRESULT WINAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv);
-HRESULT WINAPI CoCreateInstanceEx(REFCLSID      rclsid,
-                                 LPUNKNOWN     pUnkOuter,
-                                 DWORD         dwClsContext,
-                                 COSERVERINFO* pServerInfo,
-                                 ULONG         cmq,
-                                 MULTI_QI*     pResults);
+void
+WINAPI
+CoFreeUnusedLibrariesEx(
+  _In_ DWORD dwUnloadDelay,
+  _In_ DWORD dwReserved);
+
+_Check_return_
+HRESULT
+WINAPI
+CoCreateInstance(
+  _In_ REFCLSID rclsid,
+  _In_opt_ LPUNKNOWN pUnkOuter,
+  _In_ DWORD dwClsContext,
+  _In_ REFIID iid,
+  _Outptr_ _At_(*ppv, _Post_readable_size_(_Inexpressible_(varies))) LPVOID *ppv);
+
+_Check_return_
+HRESULT
+WINAPI
+CoCreateInstanceEx(
+  _In_ REFCLSID rclsid,
+  _In_opt_ LPUNKNOWN pUnkOuter,
+  _In_ DWORD dwClsContext,
+  _In_opt_ COSERVERINFO *pServerInfo,
+  _In_ ULONG cmq,
+  _Inout_updates_(cmq) MULTI_QI *pResults);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetInstanceFromFile(
+  _In_opt_ COSERVERINFO *pServerInfo,
+  _In_opt_ CLSID *pClsid,
+  _In_opt_ IUnknown *punkOuter,
+  _In_ DWORD dwClsCtx,
+  _In_ DWORD grfMode,
+  _In_ _Null_terminated_ OLECHAR *pwszName,
+  _In_ DWORD dwCount,
+  _Inout_updates_(dwCount) MULTI_QI *pResults);
 
-HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults);
-HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults);
+_Check_return_
+HRESULT
+WINAPI
+CoGetInstanceFromIStorage(
+  _In_opt_ COSERVERINFO *pServerInfo,
+  _In_opt_ CLSID *pClsid,
+  _In_opt_ IUnknown *punkOuter,
+  _In_ DWORD dwClsCtx,
+  _In_ IStorage *pstg,
+  _In_ DWORD dwCount,
+  _Inout_updates_(dwCount) MULTI_QI *pResults);
 
-HRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC* lpMalloc);
-LPVOID WINAPI CoTaskMemAlloc(ULONG size) __WINE_ALLOC_SIZE(1);
-void WINAPI CoTaskMemFree(LPVOID ptr);
-LPVOID WINAPI CoTaskMemRealloc(LPVOID ptr, ULONG size);
+_Check_return_
+HRESULT
+WINAPI
+CoGetMalloc(
+  _In_ DWORD dwMemContext,
+  _Outptr_ LPMALLOC *lpMalloc);
 
-HRESULT WINAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy);
+_Ret_opt_
+_Post_writable_byte_size_(size)
+__drv_allocatesMem(Mem)
+_Check_return_
+LPVOID
+WINAPI
+CoTaskMemAlloc(_In_ ULONG size) __WINE_ALLOC_SIZE(1);
+
+void
+WINAPI
+CoTaskMemFree(
+  _In_opt_ __drv_freesMem(Mem) _Post_invalid_ LPVOID ptr);
+
+_Ret_opt_
+_Post_writable_byte_size_(size)
+_When_(size > 0, __drv_allocatesMem(Mem) _Check_return_)
+LPVOID
+WINAPI
+CoTaskMemRealloc(
+  _In_opt_ __drv_freesMem(Mem) _Post_invalid_ LPVOID ptr,
+  _In_ ULONG size);
+
+HRESULT WINAPI CoRegisterMallocSpy(_In_ LPMALLOCSPY pMallocSpy);
 HRESULT WINAPI CoRevokeMallocSpy(void);
 
-HRESULT WINAPI CoGetContextToken( ULONG_PTR *token );
+_Check_return_ HRESULT WINAPI CoGetContextToken(_Out_ ULONG_PTR *token);
 
 /* class registration flags; passed to CoRegisterClassObject */
 typedef enum tagREGCLS
@@ -364,60 +435,286 @@ typedef enum tagREGCLS
     REGCLS_SURROGATE = 8
 } REGCLS;
 
-HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv);
-HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
-HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister);
-HRESULT WINAPI CoGetPSClsid(REFIID riid,CLSID *pclsid);
-HRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid);
-HRESULT WINAPI CoRegisterSurrogate(LPSURROGATE pSurrogate);
-HRESULT WINAPI CoSuspendClassObjects(void);
-HRESULT WINAPI CoResumeClassObjects(void);
+_Check_return_
+HRESULT
+WINAPI
+CoGetClassObject(
+  _In_ REFCLSID rclsid,
+  _In_ DWORD dwClsContext,
+  _In_opt_ COSERVERINFO *pServerInfo,
+  _In_ REFIID iid,
+  _Outptr_ LPVOID *ppv);
+
+_Check_return_
+HRESULT
+WINAPI
+CoRegisterClassObject(
+  _In_ REFCLSID rclsid,
+  _In_ LPUNKNOWN pUnk,
+  _In_ DWORD dwClsContext,
+  _In_ DWORD flags,
+  _Out_ LPDWORD lpdwRegister);
+
+_Check_return_
+HRESULT
+WINAPI
+CoRevokeClassObject(
+  _In_ DWORD dwRegister);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetPSClsid(
+  _In_ REFIID riid,
+  _Out_ CLSID *pclsid);
+
+_Check_return_
+HRESULT
+WINAPI
+CoRegisterPSClsid(
+  _In_ REFIID riid,
+  _In_ REFCLSID rclsid);
+
+_Check_return_ HRESULT WINAPI CoRegisterSurrogate(_In_ LPSURROGATE pSurrogate);
+_Check_return_ HRESULT WINAPI CoSuspendClassObjects(void);
+_Check_return_ HRESULT WINAPI CoResumeClassObjects(void);
 ULONG WINAPI CoAddRefServerProcess(void);
 ULONG WINAPI CoReleaseServerProcess(void);
 
 /* marshalling */
-HRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal);
-HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv);
-HRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
-HRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal);
-HRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);
-HRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
-HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm);
-HRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm);
-HRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved);
-HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult);
-HRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv);
-HRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases);
-BOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);
+
+_Check_return_
+HRESULT
+WINAPI
+CoCreateFreeThreadedMarshaler(
+  _In_opt_ LPUNKNOWN punkOuter,
+  _Outptr_ LPUNKNOWN *ppunkMarshal);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetInterfaceAndReleaseStream(
+  _In_ LPSTREAM pStm,
+  _In_ REFIID iid,
+  _Outptr_ LPVOID *ppv);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetMarshalSizeMax(
+  _Out_ ULONG *pulSize,
+  _In_ REFIID riid,
+  _In_ LPUNKNOWN pUnk,
+  _In_ DWORD dwDestContext,
+  _In_opt_ LPVOID pvDestContext,
+  _In_ DWORD mshlflags);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetStandardMarshal(
+  _In_ REFIID riid,
+  _In_ LPUNKNOWN pUnk,
+  _In_ DWORD dwDestContext,
+  _In_opt_ LPVOID pvDestContext,
+  _In_ DWORD mshlflags,
+  _Outptr_ LPMARSHAL *ppMarshal);
+
+HRESULT WINAPI CoMarshalHresult(_In_ LPSTREAM pstm, _In_ HRESULT hresult);
+
+_Check_return_
+HRESULT
+WINAPI
+CoMarshalInterface(
+  _In_ LPSTREAM pStm,
+  _In_ REFIID riid,
+  _In_ LPUNKNOWN pUnk,
+  _In_ DWORD dwDestContext,
+  _In_opt_ LPVOID pvDestContext,
+  _In_ DWORD mshlflags);
+
+_Check_return_
+HRESULT
+WINAPI
+CoMarshalInterThreadInterfaceInStream(
+  _In_ REFIID riid,
+  _In_ LPUNKNOWN pUnk,
+  _Outptr_ LPSTREAM *ppStm);
+
+_Check_return_ HRESULT WINAPI CoReleaseMarshalData(_In_ LPSTREAM pStm);
+
+_Check_return_
+HRESULT
+WINAPI
+CoDisconnectObject(
+  _In_ LPUNKNOWN lpUnk,
+  _In_ DWORD reserved);
+
+HRESULT WINAPI CoUnmarshalHresult(_In_ LPSTREAM pstm, _Out_ HRESULT *phresult);
+
+_Check_return_
+HRESULT
+WINAPI
+CoUnmarshalInterface(
+  _In_ LPSTREAM pStm,
+  _In_ REFIID riid,
+  _Outptr_ LPVOID *ppv);
+
+_Check_return_
+HRESULT
+WINAPI
+CoLockObjectExternal(
+  _In_ LPUNKNOWN pUnk,
+  _In_ BOOL fLock,
+  _In_ BOOL fLastUnlockReleases);
+
+BOOL WINAPI CoIsHandlerConnected(_In_ LPUNKNOWN pUnk);
 
 /* security */
-HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3);
-HRESULT WINAPI CoGetCallContext(REFIID riid, void** ppInterface);
-HRESULT WINAPI CoSwitchCallContext(IUnknown *pContext, IUnknown **ppOldContext);
-HRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc);
 
-HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilities);
-HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
-HRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy);
+_Check_return_
+HRESULT
+WINAPI
+CoInitializeSecurity(
+  _In_opt_ PSECURITY_DESCRIPTOR pSecDesc,
+  _In_ LONG cAuthSvc,
+  _In_reads_opt_(cAuthSvc) SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
+  _In_opt_ void *pReserved1,
+  _In_ DWORD dwAuthnLevel,
+  _In_ DWORD dwImpLevel,
+  _In_opt_ void *pReserved2,
+  _In_ DWORD dwCapabilities,
+  _In_opt_ void *pReserved3);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetCallContext(
+  _In_ REFIID riid,
+  _Outptr_ void **ppInterface);
+
+_Check_return_
+HRESULT
+WINAPI
+CoSwitchCallContext(
+  _In_opt_ IUnknown *pContext,
+  _Outptr_ IUnknown **ppOldContext);
 
-HRESULT WINAPI CoImpersonateClient(void);
-HRESULT WINAPI CoQueryClientBlanket(DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTHZ_HANDLE* pPrivs, DWORD* pCapabilities);
-HRESULT WINAPI CoRevertToSelf(void);
+_Check_return_
+HRESULT
+WINAPI
+CoQueryAuthenticationServices(
+  _Out_ DWORD *pcAuthSvc,
+  _Outptr_result_buffer_(*pcAuthSvc) SOLE_AUTHENTICATION_SERVICE **asAuthSvc);
+
+_Check_return_
+HRESULT
+WINAPI
+CoQueryProxyBlanket(
+  _In_ IUnknown *pProxy,
+  _Out_opt_ DWORD *pwAuthnSvc,
+  _Out_opt_ DWORD *pAuthzSvc,
+  _Outptr_opt_ OLECHAR **pServerPrincName,
+  _Out_opt_ DWORD *pAuthnLevel,
+  _Out_opt_ DWORD *pImpLevel,
+  _Out_opt_ RPC_AUTH_IDENTITY_HANDLE *pAuthInfo,
+  _Out_opt_ DWORD *pCapabilities);
+
+_Check_return_
+HRESULT
+WINAPI
+CoSetProxyBlanket(
+  _In_ IUnknown *pProxy,
+  _In_ DWORD dwAuthnSvc,
+  _In_ DWORD dwAuthzSvc,
+  _In_opt_ OLECHAR *pServerPrincName,
+  _In_ DWORD dwAuthnLevel,
+  _In_ DWORD dwImpLevel,
+  _In_opt_ RPC_AUTH_IDENTITY_HANDLE pAuthInfo,
+  _In_ DWORD dwCapabilities);
+
+_Check_return_
+HRESULT
+WINAPI CoCopyProxy(
+  _In_ IUnknown *pProxy,
+  _Outptr_ IUnknown **ppCopy);
+
+_Check_return_ HRESULT WINAPI CoImpersonateClient(void);
+
+_Check_return_
+HRESULT
+WINAPI
+CoQueryClientBlanket(
+  _Out_opt_ DWORD *pAuthnSvc,
+  _Out_opt_ DWORD *pAuthzSvc,
+  _Outptr_opt_ OLECHAR **pServerPrincName,
+  _Out_opt_ DWORD *pAuthnLevel,
+  _Out_opt_ DWORD *pImpLevel,
+  _Outptr_opt_ RPC_AUTHZ_HANDLE *pPrivs,
+  _Inout_opt_ DWORD *pCapabilities);
+
+_Check_return_ HRESULT WINAPI CoRevertToSelf(void);
 
 /* misc */
-HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew);
-HRESULT WINAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew);
-HRESULT WINAPI CoAllowSetForegroundWindow(IUnknown *pUnk, LPVOID lpvReserved);
-HRESULT WINAPI CoGetObjectContext(REFIID riid, LPVOID *ppv);
 
-HRESULT WINAPI CoCreateGuid(GUID* pguid);
-BOOL WINAPI CoIsOle1Class(REFCLSID rclsid);
+_Check_return_
+HRESULT
+WINAPI
+CoGetTreatAsClass(
+  _In_ REFCLSID clsidOld,
+  _Out_ LPCLSID pClsidNew);
+
+_Check_return_
+HRESULT
+WINAPI
+CoTreatAsClass(
+  _In_ REFCLSID clsidOld,
+  _In_ REFCLSID clsidNew);
+
+HRESULT
+WINAPI
+CoAllowSetForegroundWindow(
+  _In_ IUnknown *pUnk,
+  _In_opt_ LPVOID lpvReserved);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetObjectContext(
+  _In_ REFIID riid,
+  _Outptr_ LPVOID *ppv);
 
-BOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);
-BOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);
-HRESULT WINAPI CoFileTimeNow(FILETIME* lpFileTime);
-HRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
-HRESULT WINAPI CoRegisterChannelHook(REFGUID ExtensionGuid, IChannelHook *pChannelHook);
+_Check_return_ HRESULT WINAPI CoCreateGuid(_Out_ GUID *pguid);
+BOOL WINAPI CoIsOle1Class(_In_ REFCLSID rclsid);
+
+BOOL
+WINAPI
+CoDosDateTimeToFileTime(
+  _In_ WORD nDosDate,
+  _In_ WORD nDosTime,
+  _Out_ FILETIME *lpFileTime);
+
+BOOL
+WINAPI
+CoFileTimeToDosDateTime(
+  _In_ FILETIME *lpFileTime,
+  _Out_ WORD *lpDosDate,
+  _Out_ WORD *lpDosTime);
+
+HRESULT WINAPI CoFileTimeNow(_Out_ FILETIME *lpFileTime);
+
+_Check_return_
+HRESULT
+WINAPI
+CoRegisterMessageFilter(
+  _In_opt_ LPMESSAGEFILTER lpMessageFilter,
+  _Outptr_opt_result_maybenull_ LPMESSAGEFILTER *lplpMessageFilter);
+
+HRESULT
+WINAPI
+CoRegisterChannelHook(
+  _In_ REFGUID ExtensionGuid,
+  _In_ IChannelHook *pChannelHook);
 
 typedef enum tagCOWAIT_FLAGS
 {
@@ -425,22 +722,68 @@ typedef enum tagCOWAIT_FLAGS
     COWAIT_ALERTABLE = 0x00000002
 } COWAIT_FLAGS;
 
-HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags,DWORD dwTimeout,ULONG cHandles,LPHANDLE pHandles,LPDWORD lpdwindex);
+_Check_return_
+HRESULT
+WINAPI
+CoWaitForMultipleHandles(
+  _In_ DWORD dwFlags,
+  _In_ DWORD dwTimeout,
+  _In_ ULONG cHandles,
+  _In_reads_(cHandles) LPHANDLE pHandles,
+  _Out_ LPDWORD lpdwindex);
 
 /*****************************************************************************
  *     GUID API
  */
-HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*);
-HRESULT WINAPI CLSIDFromString(LPCOLESTR, LPCLSID);
-HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid);
-HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID);
 
-INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax);
+_Check_return_
+HRESULT
+WINAPI
+StringFromCLSID(
+  _In_ REFCLSID id,
+  _Outptr_ LPOLESTR*);
+
+_Check_return_
+HRESULT
+WINAPI
+CLSIDFromString(
+  _In_ LPCOLESTR,
+  _Out_ LPCLSID);
+
+_Check_return_
+HRESULT
+WINAPI
+CLSIDFromProgID(
+  _In_ LPCOLESTR progid,
+  _Out_ LPCLSID riid);
+
+_Check_return_
+HRESULT
+WINAPI
+ProgIDFromCLSID(
+  _In_ REFCLSID clsid,
+  _Outptr_ LPOLESTR *lplpszProgID);
+
+_Check_return_
+INT
+WINAPI
+StringFromGUID2(
+  _In_ REFGUID id,
+  _Out_writes_to_(cmax, return) LPOLESTR str,
+  _In_ INT cmax);
 
 /*****************************************************************************
  *     COM Server dll - exports
  */
-HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv) DECLSPEC_HIDDEN;
+
+_Check_return_
+HRESULT
+WINAPI
+DllGetClassObject(
+  _In_ REFCLSID rclsid,
+  _In_ REFIID riid,
+  _Outptr_ LPVOID *ppv) DECLSPEC_HIDDEN;
+
 HRESULT WINAPI DllCanUnloadNow(void) DECLSPEC_HIDDEN;
 
 /* shouldn't be here, but is nice for type checking */
@@ -453,27 +796,134 @@ HRESULT WINAPI DllUnregisterServer(void) DECLSPEC_HIDDEN;
 /*****************************************************************************
  *     Data Object
  */
-HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);
-HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID iid, LPVOID* ppv);
+
+HRESULT
+WINAPI
+CreateDataAdviseHolder(
+  _Outptr_ LPDATAADVISEHOLDER *ppDAHolder);
+
+HRESULT
+WINAPI
+CreateDataCache(
+  _In_opt_ LPUNKNOWN pUnkOuter,
+  _In_ REFCLSID rclsid,
+  _In_ REFIID iid,
+  _Out_ LPVOID *ppv);
 
 /*****************************************************************************
  *     Moniker API
  */
-HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID* ppvResult);
-HRESULT WINAPI CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, void **ppv);
-HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk);
-HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC* ppbc);
-HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, LPMONIKER* ppmk);
-HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER* ppmk);
-HRESULT WINAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, LPMONIKER* ppmkComposite);
-HRESULT WINAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR  lpszItem, LPMONIKER* ppmk);
-HRESULT WINAPI CreateObjrefMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);
-HRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);
-HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid);
-HRESULT WINAPI GetRunningObjectTable(DWORD reserved, LPRUNNINGOBJECTTABLE *pprot);
-HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szUserName, ULONG * pchEaten, LPMONIKER * ppmk);
-HRESULT WINAPI MonikerCommonPrefixWith(IMoniker* pmkThis,IMoniker* pmkOther,IMoniker** ppmkCommon);
-HRESULT WINAPI MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER * ppmkRelPath, BOOL dwReserved);
+
+_Check_return_
+HRESULT
+WINAPI
+BindMoniker(
+  _In_ LPMONIKER pmk,
+  _In_ DWORD grfOpt,
+  _In_ REFIID iidResult,
+  _Outptr_ LPVOID *ppvResult);
+
+_Check_return_
+HRESULT
+WINAPI
+CoGetObject(
+  _In_ LPCWSTR pszName,
+  _In_opt_ BIND_OPTS *pBindOptions,
+  _In_ REFIID riid,
+  _Outptr_ void **ppv);
+
+_Check_return_ HRESULT WINAPI CreateAntiMoniker(_Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateBindCtx(
+  _In_ DWORD reserved,
+  _Outptr_ LPBC *ppbc);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateClassMoniker(
+  _In_ REFCLSID rclsid,
+  _Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateFileMoniker(
+  _In_ LPCOLESTR lpszPathName,
+  _Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateGenericComposite(
+  _In_opt_ LPMONIKER pmkFirst,
+  _In_opt_ LPMONIKER pmkRest,
+  _Outptr_ LPMONIKER *ppmkComposite);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateItemMoniker(
+  _In_ LPCOLESTR lpszDelim,
+  _In_ LPCOLESTR lpszItem,
+  _Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateObjrefMoniker(
+  _In_opt_ LPUNKNOWN punk,
+  _Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+CreatePointerMoniker(
+  _In_opt_ LPUNKNOWN punk,
+  _Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+GetClassFile(
+  _In_ LPCOLESTR filePathName,
+  _Out_ CLSID *pclsid);
+
+_Check_return_
+HRESULT
+WINAPI
+GetRunningObjectTable(
+  _In_ DWORD reserved,
+  _Outptr_ LPRUNNINGOBJECTTABLE *pprot);
+
+_Check_return_
+HRESULT
+WINAPI
+MkParseDisplayName(
+  _In_ LPBC pbc,
+  _In_ LPCOLESTR szUserName,
+  _Out_ ULONG *pchEaten,
+  _Outptr_ LPMONIKER *ppmk);
+
+_Check_return_
+HRESULT
+WINAPI
+MonikerCommonPrefixWith(
+  _In_ IMoniker *pmkThis,
+  _In_ IMoniker *pmkOther,
+  _Outptr_ IMoniker **ppmkCommon);
+
+_Check_return_
+HRESULT
+WINAPI
+MonikerRelativePathTo(
+  _In_ LPMONIKER pmkSrc,
+  _In_ LPMONIKER pmkDest,
+  _Outptr_ LPMONIKER *ppmkRelPath,
+  _In_ BOOL dwReserved);
 
 /*****************************************************************************
  *     Storage API
@@ -510,17 +960,99 @@ typedef struct tagSTGOPTIONS
     const WCHAR* pwcsTemplateFile;
 } STGOPTIONS;
 
-HRESULT WINAPI StringFromIID(REFIID rclsid, LPOLESTR *lplpsz);
-HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen);
-HRESULT WINAPI StgCreateStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**);
-HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn);
-HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt);
-HRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen);
-HRESULT WINAPI StgOpenStorageEx(const WCHAR* pwcwName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions, void *reserved, REFIID riid, void **ppObjectOpen);
-
-HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode, DWORD reserved, IStorage** ppstgOpen);
-HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen);
-HRESULT WINAPI StgSetTimes( OLECHAR const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime);
+_Check_return_
+HRESULT
+WINAPI
+StringFromIID(
+  _In_ REFIID rclsid,
+  _Outptr_ LPOLESTR *lplpsz);
+
+_Check_return_
+HRESULT
+WINAPI
+StgCreateDocfile(
+  _In_opt_ _Null_terminated_ LPCOLESTR pwcsName,
+  _In_ DWORD grfMode,
+  _Reserved_ DWORD reserved,
+  _Outptr_ IStorage **ppstgOpen);
+
+_Check_return_
+HRESULT
+WINAPI
+StgCreateStorageEx(
+  _In_opt_ _Null_terminated_ const WCHAR*,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_ DWORD,
+  _Inout_opt_ STGOPTIONS*,
+  _In_opt_ void*,
+  _In_ REFIID,
+  _Outptr_ void**);
+
+_Check_return_
+HRESULT
+WINAPI
+StgIsStorageFile(
+  _In_ _Null_terminated_ LPCOLESTR fn);
+
+_Check_return_
+HRESULT
+WINAPI
+StgIsStorageILockBytes(
+  _In_ ILockBytes *plkbyt);
+
+_Check_return_
+HRESULT
+WINAPI
+StgOpenStorage(
+  _In_opt_ _Null_terminated_ const OLECHAR *pwcsName,
+  _In_opt_ IStorage *pstgPriority,
+  _In_ DWORD grfMode,
+  _In_opt_z_ SNB snbExclude,
+  _In_ DWORD reserved,
+  _Outptr_ IStorage **ppstgOpen);
+
+_Check_return_
+HRESULT
+WINAPI
+StgOpenStorageEx(
+  _In_ _Null_terminated_ const WCHAR *pwcwName,
+  _In_ DWORD grfMode,
+  _In_ DWORD stgfmt,
+  _In_ DWORD grfAttrs,
+  _Inout_opt_ STGOPTIONS *pStgOptions,
+  _In_opt_ void *reserved,
+  _In_ REFIID riid,
+  _Outptr_ void **ppObjectOpen);
+
+_Check_return_
+HRESULT
+WINAPI
+StgCreateDocfileOnILockBytes(
+  _In_ ILockBytes *plkbyt,
+  _In_ DWORD grfMode,
+  _In_ DWORD reserved,
+  _Outptr_ IStorage **ppstgOpen);
+
+_Check_return_
+HRESULT
+WINAPI
+StgOpenStorageOnILockBytes(
+  _In_ ILockBytes *plkbyt,
+  _In_opt_ IStorage *pstgPriority,
+  _In_ DWORD grfMode,
+  _In_opt_z_ SNB snbExclude,
+  _Reserved_ DWORD reserved,
+  _Outptr_ IStorage **ppstgOpen);
+
+_Check_return_
+HRESULT
+WINAPI
+StgSetTimes(
+  _In_ _Null_terminated_ OLECHAR const *lpszName,
+  _In_opt_ FILETIME const *pctime,
+  _In_opt_ FILETIME const *patime,
+  _In_opt_ FILETIME const *pmtime);
 
 #ifdef __cplusplus
 }
index 98e8dbf..0fb0833 100644 (file)
@@ -38,60 +38,158 @@ DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0);
 ULONG WINAPI OaBuildVersion(void);
 
 /* BSTR functions */
-BSTR WINAPI SysAllocString(const OLECHAR*);
-BSTR WINAPI SysAllocStringByteLen(LPCSTR,UINT);
-BSTR WINAPI SysAllocStringLen(const OLECHAR*,UINT);
-void WINAPI SysFreeString(BSTR);
-INT  WINAPI SysReAllocString(LPBSTR,const OLECHAR*);
-int  WINAPI SysReAllocStringLen(BSTR*,const OLECHAR*,UINT);
-UINT WINAPI SysStringByteLen(BSTR);
-UINT WINAPI SysStringLen(BSTR);
+BSTR WINAPI SysAllocString(_In_opt_z_ const OLECHAR*);
+BSTR WINAPI SysAllocStringByteLen(_In_opt_z_ LPCSTR, _In_ UINT);
+
+_Ret_writes_maybenull_z_(ui + 1)
+BSTR
+WINAPI
+SysAllocStringLen(
+  _In_reads_opt_(ui) const OLECHAR*,
+  UINT ui);
+
+void WINAPI SysFreeString(_In_opt_ BSTR);
+
+INT
+WINAPI
+SysReAllocString(
+  _Inout_ _At_(*pbstr, _Pre_z_ _Post_z_ _Post_readable_size_(_String_length_(psz) + 1)) LPBSTR pbstr,
+  _In_opt_z_ const OLECHAR *psz);
+
+_Check_return_
+int
+WINAPI
+SysReAllocStringLen(
+  _Inout_ _At_(*pbstr, _Pre_z_ _Post_z_ _Post_readable_size_(len + 1)) BSTR *pbstr,
+  _In_opt_z_ const OLECHAR*,
+  _In_ UINT len);
+
+_Post_equal_to_(_String_length_(bstr) * sizeof(OLECHAR))
+UINT
+WINAPI
+SysStringByteLen(
+  _In_opt_ BSTR bstr);
+
+_Post_equal_to_(pbstr == NULL ? 0 : _String_length_(pbstr))
+UINT
+WINAPI
+SysStringLen(
+  _In_opt_ BSTR pbstr);
 
 /* IErrorInfo helpers */
-HRESULT WINAPI SetErrorInfo(ULONG,IErrorInfo*);
-HRESULT WINAPI GetErrorInfo(ULONG,IErrorInfo**);
-HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo**);
+HRESULT WINAPI SetErrorInfo(_In_ ULONG, _In_opt_ IErrorInfo*);
+_Check_return_ HRESULT WINAPI GetErrorInfo(_In_ ULONG, _Outptr_ IErrorInfo**);
+_Check_return_ HRESULT WINAPI CreateErrorInfo(_Outptr_ ICreateErrorInfo**);
 
 /* SafeArray functions */
-SAFEARRAY* WINAPI SafeArrayCreate(VARTYPE,UINT,SAFEARRAYBOUND*);
-SAFEARRAY* WINAPI SafeArrayCreateEx(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID);
-SAFEARRAY* WINAPI SafeArrayCreateVector(VARTYPE,LONG,ULONG);
-SAFEARRAY* WINAPI SafeArrayCreateVectorEx(VARTYPE,LONG,ULONG,LPVOID);
-
-HRESULT WINAPI SafeArrayAllocDescriptor(UINT,SAFEARRAY**);
-HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE,UINT,SAFEARRAY**);
-HRESULT WINAPI SafeArrayAllocData(SAFEARRAY*);
-HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY*);
-HRESULT WINAPI SafeArrayPutElement(SAFEARRAY*,LONG*,void*);
-HRESULT WINAPI SafeArrayGetElement(SAFEARRAY*,LONG*,void*);
-HRESULT WINAPI SafeArrayLock(SAFEARRAY*);
-HRESULT WINAPI SafeArrayUnlock(SAFEARRAY*);
-HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY*,UINT,LONG*);
-HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY*,UINT,LONG*);
-UINT    WINAPI SafeArrayGetDim(SAFEARRAY*);
-UINT    WINAPI SafeArrayGetElemsize(SAFEARRAY*);
-HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY*,VARTYPE*);
-HRESULT WINAPI SafeArrayAccessData(SAFEARRAY*,void**);
-HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY*);
-HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY*,LONG*,void **);
-HRESULT WINAPI SafeArrayCopyData(SAFEARRAY*,SAFEARRAY*);
-HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY*);
-HRESULT WINAPI SafeArrayDestroy(SAFEARRAY*);
-HRESULT WINAPI SafeArrayCopy(SAFEARRAY*,SAFEARRAY**);
-HRESULT WINAPI SafeArrayRedim(SAFEARRAY*,SAFEARRAYBOUND*);
-HRESULT WINAPI SafeArraySetRecordInfo(SAFEARRAY*,IRecordInfo*);
-HRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY*,IRecordInfo**);
-HRESULT WINAPI SafeArraySetIID(SAFEARRAY*,REFGUID);
-HRESULT WINAPI SafeArrayGetIID(SAFEARRAY*,GUID*);
-
-HRESULT WINAPI VectorFromBstr(BSTR,SAFEARRAY**);
-HRESULT WINAPI BstrFromVector(SAFEARRAY*,BSTR*);
+
+SAFEARRAY*
+WINAPI
+SafeArrayCreate(
+  _In_ VARTYPE,
+  _In_ UINT,
+  _In_ SAFEARRAYBOUND*);
+
+SAFEARRAY*
+WINAPI
+SafeArrayCreateEx(
+  _In_ VARTYPE,
+  _In_ UINT,
+  _In_ SAFEARRAYBOUND*,
+  _In_ LPVOID);
+
+SAFEARRAY*
+WINAPI
+SafeArrayCreateVector(
+  _In_ VARTYPE,
+  _In_ LONG,
+  _In_ ULONG);
+
+SAFEARRAY*
+WINAPI
+SafeArrayCreateVectorEx(
+  _In_ VARTYPE,
+  _In_ LONG,
+  _In_ ULONG,
+  _In_ LPVOID);
+
+HRESULT WINAPI SafeArrayAllocDescriptor(_In_ UINT, _Outptr_ SAFEARRAY**);
+
+HRESULT
+WINAPI
+SafeArrayAllocDescriptorEx(
+  _In_ VARTYPE,
+  _In_ UINT,
+  _Outptr_ SAFEARRAY**);
+
+HRESULT WINAPI SafeArrayAllocData(_In_ SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroyDescriptor(_In_ SAFEARRAY*);
+
+_Check_return_
+HRESULT
+WINAPI
+SafeArrayPutElement(
+  _In_ SAFEARRAY*,
+  LONG*,
+  _In_ void*);
+
+HRESULT WINAPI SafeArrayGetElement(_In_ SAFEARRAY*, LONG*, _Out_ void*);
+HRESULT WINAPI SafeArrayLock(_In_ SAFEARRAY*);
+HRESULT WINAPI SafeArrayUnlock(_In_ SAFEARRAY*);
+HRESULT WINAPI SafeArrayGetUBound(_In_ SAFEARRAY*, _In_ UINT, _Out_ LONG*);
+HRESULT WINAPI SafeArrayGetLBound(_In_ SAFEARRAY*, _In_ UINT, _Out_ LONG*);
+UINT    WINAPI SafeArrayGetDim(_In_ SAFEARRAY*);
+UINT    WINAPI SafeArrayGetElemsize(_In_ SAFEARRAY*);
+HRESULT WINAPI SafeArrayGetVartype(_In_ SAFEARRAY*, _Out_ VARTYPE*);
+HRESULT WINAPI SafeArrayAccessData(_In_ SAFEARRAY*, void**);
+HRESULT WINAPI SafeArrayUnaccessData(_In_ SAFEARRAY*);
+
+HRESULT
+WINAPI
+SafeArrayPtrOfIndex(
+  _In_ SAFEARRAY *psa,
+  _In_reads_(psa->cDims) LONG*,
+  _Outptr_result_bytebuffer_(psa->cbElements) void **);
+
+_Check_return_
+HRESULT
+WINAPI
+SafeArrayCopyData(
+  _In_ SAFEARRAY*,
+  _In_ SAFEARRAY*);
+
+HRESULT WINAPI SafeArrayDestroyData(_In_ SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroy(_In_ SAFEARRAY*);
+
+_Check_return_
+HRESULT
+WINAPI
+SafeArrayCopy(
+  _In_ SAFEARRAY*,
+  _Outptr_ SAFEARRAY**);
+
+HRESULT WINAPI SafeArrayRedim(_Inout_ SAFEARRAY*, _In_ SAFEARRAYBOUND*);
+HRESULT WINAPI SafeArraySetRecordInfo(_In_ SAFEARRAY*, _In_ IRecordInfo*);
+HRESULT WINAPI SafeArrayGetRecordInfo(_In_ SAFEARRAY*, _Outptr_ IRecordInfo**);
+HRESULT WINAPI SafeArraySetIID(_In_ SAFEARRAY*, _In_ REFGUID);
+HRESULT WINAPI SafeArrayGetIID(_In_ SAFEARRAY*, _Out_ GUID*);
+
+_Check_return_ HRESULT WINAPI VectorFromBstr(_In_ BSTR, _Outptr_ SAFEARRAY**);
+_Check_return_ HRESULT WINAPI BstrFromVector(_In_ SAFEARRAY*, _Out_ BSTR*);
 
 /* Object registration helpers */
 #define ACTIVEOBJECT_STRONG 0
 #define ACTIVEOBJECT_WEAK   1
 
-HRESULT WINAPI RegisterActiveObject(LPUNKNOWN,REFCLSID,DWORD,LPDWORD);
+_Check_return_
+HRESULT
+WINAPI
+RegisterActiveObject(
+  LPUNKNOWN,
+  REFCLSID,
+  DWORD,
+  LPDWORD);
+
 HRESULT WINAPI RevokeActiveObject(DWORD,LPVOID);
 HRESULT WINAPI GetActiveObject(REFCLSID,LPVOID,LPUNKNOWN*);
 
@@ -180,12 +278,29 @@ HRESULT WINAPI GetRecordInfoFromGuids(REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordIn
 #define V_UNKNOWNREF(A)  V_UNION(A,ppunkVal)
 #define V_VARIANTREF(A)  V_UNION(A,pvarVal)
 
-void    WINAPI VariantInit(VARIANT*);
-HRESULT WINAPI VariantClear(VARIANT*);
-HRESULT WINAPI VariantCopy(VARIANT*,VARIANT*);
-HRESULT WINAPI VariantCopyInd(VARIANT*,VARIANT*);
-HRESULT WINAPI VariantChangeType(VARIANT*,VARIANT*,USHORT,VARTYPE);
-HRESULT WINAPI VariantChangeTypeEx(VARIANT*,VARIANT*,LCID,USHORT,VARTYPE);
+void    WINAPI VariantInit(_Out_ VARIANT*);
+HRESULT WINAPI VariantClear(_Inout_ VARIANT*);
+_Check_return_ HRESULT WINAPI VariantCopy(_Inout_ VARIANT*, _In_ VARIANT*);
+_Check_return_ HRESULT WINAPI VariantCopyInd(_Inout_ VARIANT*, _In_ VARIANT*);
+
+_Check_return_
+HRESULT
+WINAPI
+VariantChangeType(
+  _Inout_ VARIANT*,
+  _In_ VARIANT*,
+  _In_ USHORT,
+  _In_ VARTYPE);
+
+_Check_return_
+HRESULT
+WINAPI
+VariantChangeTypeEx(
+  _Inout_ VARIANT*,
+  _In_ VARIANT*,
+  _In_ LCID,
+  _In_ USHORT,
+  _In_ VARTYPE);
 
 /* VariantChangeType/VariantChangeTypeEx flags */
 #define VARIANT_NOVALUEPROP        0x01 /* Don't get the default value property from IDispatch */
@@ -222,247 +337,247 @@ HRESULT WINAPI VariantChangeTypeEx(VARIANT*,VARIANT*,LCID,USHORT,VARTYPE);
 #define VTDATEGRE_MIN -657434 /* Minimum possible Gregorian date: 1/1/100 */
 #define VTDATEGRE_MAX 2958465 /* Maximum possible Gregorian date: 31/12/9999 */
 
-HRESULT WINAPI VarUI1FromI2(SHORT,BYTE*);
-HRESULT WINAPI VarUI1FromI4(LONG,BYTE*);
-HRESULT WINAPI VarUI1FromI8(LONG64,BYTE*);
-HRESULT WINAPI VarUI1FromR4(FLOAT,BYTE*);
-HRESULT WINAPI VarUI1FromR8(DOUBLE,BYTE*);
-HRESULT WINAPI VarUI1FromDate(DATE,BYTE*);
-HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL,BYTE*);
-HRESULT WINAPI VarUI1FromI1(signed char,BYTE*);
-HRESULT WINAPI VarUI1FromUI2(USHORT,BYTE*);
-HRESULT WINAPI VarUI1FromUI4(ULONG,BYTE*);
-HRESULT WINAPI VarUI1FromUI8(ULONG64,BYTE*);
-HRESULT WINAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*);
-HRESULT WINAPI VarUI1FromCy(CY,BYTE*);
-HRESULT WINAPI VarUI1FromDec(DECIMAL*,BYTE*);
-HRESULT WINAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*);
-
-HRESULT WINAPI VarI2FromUI1(BYTE,SHORT*);
-HRESULT WINAPI VarI2FromI4(LONG,SHORT*);
-HRESULT WINAPI VarI2FromI8(LONG64,SHORT*);
-HRESULT WINAPI VarI2FromR4(FLOAT,SHORT*);
-HRESULT WINAPI VarI2FromR8(DOUBLE,SHORT*);
-HRESULT WINAPI VarI2FromDate(DATE,SHORT*);
-HRESULT WINAPI VarI2FromBool(VARIANT_BOOL,SHORT*);
-HRESULT WINAPI VarI2FromI1(signed char,SHORT*);
-HRESULT WINAPI VarI2FromUI2(USHORT,SHORT*);
-HRESULT WINAPI VarI2FromUI4(ULONG,SHORT*);
-HRESULT WINAPI VarI2FromUI8(ULONG64,SHORT*);
-HRESULT WINAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*);
+HRESULT WINAPI VarUI1FromI2(SHORT, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromI4(LONG, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromI8(LONG64, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromR4(FLOAT, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromR8(DOUBLE, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromDate(DATE, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromI1(signed char, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromUI2(USHORT, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromUI4(ULONG, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromUI8(ULONG64, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromCy(CY, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromDec(_In_ DECIMAL*, _Out_ BYTE*);
+HRESULT WINAPI VarUI1FromDisp(IDispatch*, LCID, _Out_ BYTE*);
+
+HRESULT WINAPI VarI2FromUI1(BYTE, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromI4(LONG, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromI8(LONG64, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromR4(FLOAT, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromR8(DOUBLE, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromDate(DATE, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromBool(VARIANT_BOOL, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromI1(signed char, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromUI2(USHORT, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromUI4(ULONG, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromUI8(ULONG64, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ SHORT*);
 HRESULT WINAPI VarI2FromCy(CY,SHORT*);
-HRESULT WINAPI VarI2FromDec(DECIMAL*,SHORT*);
-HRESULT WINAPI VarI2FromDisp(IDispatch*,LCID,SHORT*);
-
-HRESULT WINAPI VarI4FromUI1(BYTE,LONG*);
-HRESULT WINAPI VarI4FromI2(SHORT,LONG*);
-HRESULT WINAPI VarI4FromI8(LONG64,LONG*);
-HRESULT WINAPI VarI4FromR4(FLOAT,LONG*);
-HRESULT WINAPI VarI4FromR8(DOUBLE,LONG*);
-HRESULT WINAPI VarI4FromDate(DATE,LONG*);
-HRESULT WINAPI VarI4FromBool(VARIANT_BOOL,LONG*);
-HRESULT WINAPI VarI4FromI1(signed char,LONG*);
-HRESULT WINAPI VarI4FromUI2(USHORT,LONG*);
-HRESULT WINAPI VarI4FromUI4(ULONG,LONG*);
-HRESULT WINAPI VarI4FromUI8(ULONG64,LONG*);
-HRESULT WINAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*);
-HRESULT WINAPI VarI4FromCy(CY,LONG*);
-HRESULT WINAPI VarI4FromDec(DECIMAL*,LONG*);
-HRESULT WINAPI VarI4FromDisp(IDispatch*,LCID,LONG*);
-
-HRESULT WINAPI VarI8FromUI1(BYTE,LONG64*);
-HRESULT WINAPI VarI8FromI2(SHORT,LONG64*);
+HRESULT WINAPI VarI2FromDec(_In_ DECIMAL*, _Out_ SHORT*);
+HRESULT WINAPI VarI2FromDisp(IDispatch*, LCID, _Out_ SHORT*);
+
+HRESULT WINAPI VarI4FromUI1(BYTE, _Out_ LONG*);
+HRESULT WINAPI VarI4FromI2(SHORT, _Out_ LONG*);
+HRESULT WINAPI VarI4FromI8(LONG64, _Out_ LONG*);
+HRESULT WINAPI VarI4FromR4(FLOAT, _Out_ LONG*);
+HRESULT WINAPI VarI4FromR8(DOUBLE, _Out_ LONG*);
+HRESULT WINAPI VarI4FromDate(DATE, _Out_ LONG*);
+HRESULT WINAPI VarI4FromBool(VARIANT_BOOL, _Out_ LONG*);
+HRESULT WINAPI VarI4FromI1(signed char, _Out_ LONG*);
+HRESULT WINAPI VarI4FromUI2(USHORT, _Out_ LONG*);
+HRESULT WINAPI VarI4FromUI4(ULONG, _Out_ LONG*);
+HRESULT WINAPI VarI4FromUI8(ULONG64, _Out_ LONG*);
+HRESULT WINAPI VarI4FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ LONG*);
+HRESULT WINAPI VarI4FromCy(CY, _Out_ LONG*);
+HRESULT WINAPI VarI4FromDec(_In_ DECIMAL*, _Out_ LONG*);
+HRESULT WINAPI VarI4FromDisp(IDispatch*, _In_ LCID, _Out_ LONG*);
+
+HRESULT WINAPI VarI8FromUI1(BYTE, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromI2(SHORT, _Out_ LONG64*);
 HRESULT WINAPI VarI8FromI4(LONG,LONG64*);
-HRESULT WINAPI VarI8FromR4(FLOAT,LONG64*);
-HRESULT WINAPI VarI8FromR8(DOUBLE,LONG64*);
-HRESULT WINAPI VarI8FromDate(DATE,LONG64*);
-HRESULT WINAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*);
-HRESULT WINAPI VarI8FromBool(VARIANT_BOOL,LONG64*);
-HRESULT WINAPI VarI8FromI1(signed char,LONG64*);
-HRESULT WINAPI VarI8FromUI2(USHORT,LONG64*);
-HRESULT WINAPI VarI8FromUI4(ULONG,LONG64*);
-HRESULT WINAPI VarI8FromUI8(ULONG64,LONG64*);
-HRESULT WINAPI VarI8FromDec(DECIMAL *pdecIn,LONG64*);
+HRESULT WINAPI VarI8FromR4(FLOAT, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromR8(DOUBLE, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromDate(DATE, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromBool(VARIANT_BOOL, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromI1(signed char, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromUI2(USHORT, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromUI4(ULONG, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromUI8(ULONG64, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromDec(_In_ DECIMAL *pdecIn, _Out_ LONG64*);
 HRESULT WINAPI VarI8FromInt(INT intIn,LONG64*);
-HRESULT WINAPI VarI8FromCy(CY,LONG64*);
-HRESULT WINAPI VarI8FromDisp(IDispatch*,LCID,LONG64*);
-
-HRESULT WINAPI VarR4FromUI1(BYTE,FLOAT*);
-HRESULT WINAPI VarR4FromI2(SHORT,FLOAT*);
-HRESULT WINAPI VarR4FromI4(LONG,FLOAT*);
-HRESULT WINAPI VarR4FromI8(LONG64,FLOAT*);
-HRESULT WINAPI VarR4FromR8(DOUBLE,FLOAT*);
-HRESULT WINAPI VarR4FromDate(DATE,FLOAT*);
-HRESULT WINAPI VarR4FromBool(VARIANT_BOOL,FLOAT*);
-HRESULT WINAPI VarR4FromI1(signed char,FLOAT*);
-HRESULT WINAPI VarR4FromUI2(USHORT,FLOAT*);
-HRESULT WINAPI VarR4FromUI4(ULONG,FLOAT*);
-HRESULT WINAPI VarR4FromUI8(ULONG64,FLOAT*);
-HRESULT WINAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*);
+HRESULT WINAPI VarI8FromCy(_In_ CY, _Out_ LONG64*);
+HRESULT WINAPI VarI8FromDisp(IDispatch*, _In_ LCID, _Out_ LONG64*);
+
+HRESULT WINAPI VarR4FromUI1(BYTE, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromI2(SHORT, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromI4(LONG, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromI8(LONG64, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromR8(DOUBLE, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromDate(DATE, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromBool(VARIANT_BOOL, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromI1(signed char, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromUI2(USHORT, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromUI4(ULONG, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromUI8(ULONG64, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ FLOAT*);
 HRESULT WINAPI VarR4FromCy(CY,FLOAT*);
-HRESULT WINAPI VarR4FromDec(DECIMAL*,FLOAT*);
-HRESULT WINAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*);
-
-HRESULT WINAPI VarR8FromUI1(BYTE,double*);
-HRESULT WINAPI VarR8FromI2(SHORT,double*);
-HRESULT WINAPI VarR8FromI4(LONG,double*);
-HRESULT WINAPI VarR8FromI8(LONG64,double*);
-HRESULT WINAPI VarR8FromR4(FLOAT,double*);
-HRESULT WINAPI VarR8FromDate(DATE,double*);
-HRESULT WINAPI VarR8FromBool(VARIANT_BOOL,double*);
+HRESULT WINAPI VarR4FromDec(_In_ DECIMAL*, _Out_ FLOAT*);
+HRESULT WINAPI VarR4FromDisp(IDispatch*, LCID, _Out_ FLOAT*);
+
+HRESULT WINAPI VarR8FromUI1(BYTE, _Out_ double*);
+HRESULT WINAPI VarR8FromI2(SHORT, _Out_ double*);
+HRESULT WINAPI VarR8FromI4(LONG, _Out_ double*);
+HRESULT WINAPI VarR8FromI8(LONG64, _Out_ double*);
+HRESULT WINAPI VarR8FromR4(FLOAT, _Out_ double*);
+HRESULT WINAPI VarR8FromDate(DATE, _Out_ double*);
+HRESULT WINAPI VarR8FromBool(VARIANT_BOOL, _Out_ double*);
 HRESULT WINAPI VarR8FromI1(signed char,double*);
-HRESULT WINAPI VarR8FromUI2(USHORT,double*);
-HRESULT WINAPI VarR8FromUI4(ULONG,double*);
-HRESULT WINAPI VarR8FromUI8(ULONG64,double*);
-HRESULT WINAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*);
+HRESULT WINAPI VarR8FromUI2(USHORT, _Out_ double*);
+HRESULT WINAPI VarR8FromUI4(ULONG, _Out_ double*);
+HRESULT WINAPI VarR8FromUI8(ULONG64, _Out_ double*);
+HRESULT WINAPI VarR8FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ double*);
 HRESULT WINAPI VarR8FromCy(CY,double*);
-HRESULT WINAPI VarR8FromDec(const DECIMAL*,double*);
-HRESULT WINAPI VarR8FromDisp(IDispatch*,LCID,double*);
-
-HRESULT WINAPI VarDateFromUI1(BYTE,DATE*);
-HRESULT WINAPI VarDateFromI2(SHORT,DATE*);
-HRESULT WINAPI VarDateFromI4(LONG,DATE*);
-HRESULT WINAPI VarDateFromI8(LONG64,DATE*);
-HRESULT WINAPI VarDateFromR4(FLOAT,DATE*);
-HRESULT WINAPI VarDateFromR8(DOUBLE,DATE*);
-HRESULT WINAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*);
-HRESULT WINAPI VarDateFromI1(signed char,DATE*);
-HRESULT WINAPI VarDateFromUI2(USHORT,DATE*);
-HRESULT WINAPI VarDateFromUI4(ULONG,DATE*);
-HRESULT WINAPI VarDateFromUI8(ULONG64,DATE*);
-HRESULT WINAPI VarDateFromBool(VARIANT_BOOL,DATE*);
-HRESULT WINAPI VarDateFromCy(CY,DATE*);
-HRESULT WINAPI VarDateFromDec(DECIMAL*,DATE*);
-HRESULT WINAPI VarDateFromDisp(IDispatch*,LCID,DATE*);
-
-HRESULT WINAPI VarCyFromUI1(BYTE,CY*);
-HRESULT WINAPI VarCyFromI2(SHORT sIn,CY*);
-HRESULT WINAPI VarCyFromI4(LONG,CY*);
-HRESULT WINAPI VarCyFromI8(LONG64,CY*);
-HRESULT WINAPI VarCyFromR4(FLOAT,CY*);
-HRESULT WINAPI VarCyFromR8(DOUBLE,CY*);
-HRESULT WINAPI VarCyFromDate(DATE,CY*);
-HRESULT WINAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*);
-HRESULT WINAPI VarCyFromBool(VARIANT_BOOL,CY*);
-HRESULT WINAPI VarCyFromI1(signed char,CY*);
-HRESULT WINAPI VarCyFromUI2(USHORT,CY*);
-HRESULT WINAPI VarCyFromUI4(ULONG,CY*);
-HRESULT WINAPI VarCyFromUI8(ULONG64,CY*);
-HRESULT WINAPI VarCyFromDec(DECIMAL*,CY*);
-HRESULT WINAPI VarCyFromDisp(IDispatch*,LCID,CY*);
-
-HRESULT WINAPI VarBstrFromUI1(BYTE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarR8FromDec(_In_ const DECIMAL*, _Out_ double*);
+HRESULT WINAPI VarR8FromDisp(IDispatch*, LCID, _Out_ double*);
+
+HRESULT WINAPI VarDateFromUI1(BYTE, _Out_ DATE*);
+HRESULT WINAPI VarDateFromI2(SHORT, _Out_ DATE*);
+HRESULT WINAPI VarDateFromI4(LONG, _Out_ DATE*);
+HRESULT WINAPI VarDateFromI8(LONG64, _Out_ DATE*);
+HRESULT WINAPI VarDateFromR4(FLOAT, _Out_ DATE*);
+HRESULT WINAPI VarDateFromR8(DOUBLE, _Out_ DATE*);
+HRESULT WINAPI VarDateFromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ DATE*);
+HRESULT WINAPI VarDateFromI1(signed char, _Out_ DATE*);
+HRESULT WINAPI VarDateFromUI2(USHORT, _Out_ DATE*);
+HRESULT WINAPI VarDateFromUI4(ULONG, _Out_ DATE*);
+HRESULT WINAPI VarDateFromUI8(ULONG64, _Out_ DATE*);
+HRESULT WINAPI VarDateFromBool(VARIANT_BOOL, _Out_ DATE*);
+HRESULT WINAPI VarDateFromCy(CY, _Out_ DATE*);
+HRESULT WINAPI VarDateFromDec(_In_ DECIMAL*, _Out_ DATE*);
+HRESULT WINAPI VarDateFromDisp(IDispatch*, LCID, _Out_ DATE*);
+
+HRESULT WINAPI VarCyFromUI1(BYTE, _Out_ CY*);
+HRESULT WINAPI VarCyFromI2(SHORT sIn, _Out_ CY*);
+HRESULT WINAPI VarCyFromI4(LONG, _Out_ CY*);
+HRESULT WINAPI VarCyFromI8(LONG64, _Out_ CY*);
+HRESULT WINAPI VarCyFromR4(FLOAT, _Out_ CY*);
+HRESULT WINAPI VarCyFromR8(DOUBLE, _Out_ CY*);
+HRESULT WINAPI VarCyFromDate(DATE, _Out_ CY*);
+HRESULT WINAPI VarCyFromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ CY*);
+HRESULT WINAPI VarCyFromBool(VARIANT_BOOL, _Out_ CY*);
+HRESULT WINAPI VarCyFromI1(signed char, _Out_ CY*);
+HRESULT WINAPI VarCyFromUI2(USHORT, _Out_ CY*);
+HRESULT WINAPI VarCyFromUI4(ULONG, _Out_ CY*);
+HRESULT WINAPI VarCyFromUI8(ULONG64, _Out_ CY*);
+HRESULT WINAPI VarCyFromDec(_In_ DECIMAL*, _Out_ CY*);
+HRESULT WINAPI VarCyFromDisp(_In_ IDispatch*, LCID, _Out_ CY*);
+
+HRESULT WINAPI VarBstrFromUI1(BYTE, LCID, ULONG, _Out_ BSTR*);
 HRESULT WINAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromI4(LONG,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromI8(LONG64,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromR4(FLOAT,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromR8(DOUBLE,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromDate(DATE,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromI1(signed char,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromUI2(USHORT,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromUI8(ULONG64,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromUI4(ULONG,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromCy(CY,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromDec(DECIMAL*,LCID,ULONG,BSTR*);
-HRESULT WINAPI VarBstrFromDisp(IDispatch*,LCID,ULONG,BSTR*);
-
-HRESULT WINAPI VarBoolFromUI1(BYTE,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromI2(SHORT,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromI4(LONG,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromI8(LONG64,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromDate(DATE,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromI1(signed char,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromUI8(ULONG64,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromCy(CY,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromDec(DECIMAL*,VARIANT_BOOL*);
-HRESULT WINAPI VarBoolFromDisp(IDispatch*,LCID,VARIANT_BOOL*);
-
-HRESULT WINAPI VarI1FromUI1(BYTE,signed char*);
-HRESULT WINAPI VarI1FromI2(SHORT,signed char*);
-HRESULT WINAPI VarI1FromI4(LONG,signed char*);
-HRESULT WINAPI VarI1FromI8(LONG64,signed char*);
-HRESULT WINAPI VarI1FromR4(FLOAT,signed char*);
-HRESULT WINAPI VarI1FromR8(DOUBLE,signed char*);
-HRESULT WINAPI VarI1FromDate(DATE,signed char*);
-HRESULT WINAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*);
-HRESULT WINAPI VarI1FromBool(VARIANT_BOOL,signed char*);
-HRESULT WINAPI VarI1FromUI2(USHORT,signed char*);
-HRESULT WINAPI VarI1FromUI4(ULONG,signed char*);
-HRESULT WINAPI VarI1FromUI8(ULONG64,signed char*);
-HRESULT WINAPI VarI1FromCy(CY,signed char*);
-HRESULT WINAPI VarI1FromDec(DECIMAL*,signed char*);
-HRESULT WINAPI VarI1FromDisp(IDispatch*,LCID,signed char*);
-
-HRESULT WINAPI VarUI2FromUI1(BYTE,USHORT*);
-HRESULT WINAPI VarUI2FromI2(SHORT,USHORT*);
-HRESULT WINAPI VarUI2FromI4(LONG,USHORT*);
-HRESULT WINAPI VarUI2FromI8(LONG64,USHORT*);
-HRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*);
+HRESULT WINAPI VarBstrFromI4(LONG, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromI8(LONG64, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromR4(FLOAT, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromR8(DOUBLE, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromDate(_In_ DATE, _In_ LCID, _In_ ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromI1(signed char, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromUI2(USHORT, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromUI8(ULONG64, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromUI4(ULONG, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromCy(CY, LCID, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromDec(_In_ DECIMAL*, _In_ LCID, _In_ ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarBstrFromDisp(IDispatch*, LCID, ULONG, _Out_ BSTR*);
+
+HRESULT WINAPI VarBoolFromUI1(BYTE, _Out_ VARIANT_BOOL*);
+_Check_return_ HRESULT WINAPI VarBoolFromI2(_In_ SHORT, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI4(LONG, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI8(LONG64, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromR4(FLOAT, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromR8(DOUBLE, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDate(DATE, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI1(signed char, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI2(USHORT, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI4(ULONG, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI8(ULONG64, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromCy(CY, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDec(_In_ DECIMAL*, _Out_ VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDisp(IDispatch*, LCID, _Out_ VARIANT_BOOL*);
+
+HRESULT WINAPI VarI1FromUI1(_In_ BYTE, _Out_ signed char*);
+HRESULT WINAPI VarI1FromI2(_In_ SHORT, _Out_ signed char*);
+HRESULT WINAPI VarI1FromI4(_In_ LONG, _Out_ signed char*);
+HRESULT WINAPI VarI1FromI8(_In_ LONG64, _Out_ signed char*);
+HRESULT WINAPI VarI1FromR4(_In_ FLOAT, _Out_ signed char*);
+HRESULT WINAPI VarI1FromR8(_In_ DOUBLE, _Out_ signed char*);
+HRESULT WINAPI VarI1FromDate(_In_ DATE, _Out_ signed char*);
+HRESULT WINAPI VarI1FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ signed char*);
+HRESULT WINAPI VarI1FromBool(_In_ VARIANT_BOOL, _Out_ signed char*);
+HRESULT WINAPI VarI1FromUI2(_In_ USHORT, _Out_ signed char*);
+HRESULT WINAPI VarI1FromUI4(_In_ ULONG, _Out_ signed char*);
+HRESULT WINAPI VarI1FromUI8(_In_ ULONG64, _Out_ signed char*);
+HRESULT WINAPI VarI1FromCy(_In_ CY, _Out_ signed char*);
+HRESULT WINAPI VarI1FromDec(_In_ DECIMAL*, _Out_ signed char*);
+HRESULT WINAPI VarI1FromDisp(_In_ IDispatch*, _In_ LCID, _Out_ signed char*);
+
+HRESULT WINAPI VarUI2FromUI1(BYTE, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromI2(SHORT, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromI4(LONG, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromI8(LONG64, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromR4(FLOAT, _Out_ USHORT*);
 HRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*);
-HRESULT WINAPI VarUI2FromDate(DATE,USHORT*);
-HRESULT WINAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*);
-HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL,USHORT*);
-HRESULT WINAPI VarUI2FromI1(signed char,USHORT*);
-HRESULT WINAPI VarUI2FromUI4(ULONG,USHORT*);
-HRESULT WINAPI VarUI2FromUI8(ULONG64,USHORT*);
-HRESULT WINAPI VarUI2FromCy(CY,USHORT*);
-HRESULT WINAPI VarUI2FromDec(DECIMAL*,USHORT*);
-HRESULT WINAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*);
-
-HRESULT WINAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*);
-HRESULT WINAPI VarUI4FromUI1(BYTE,ULONG*);
-HRESULT WINAPI VarUI4FromI2(SHORT,ULONG*);
-HRESULT WINAPI VarUI4FromI4(LONG,ULONG*);
-HRESULT WINAPI VarUI4FromI8(LONG64,ULONG*);
-HRESULT WINAPI VarUI4FromR4(FLOAT,ULONG*);
-HRESULT WINAPI VarUI4FromR8(DOUBLE,ULONG*);
-HRESULT WINAPI VarUI4FromDate(DATE,ULONG*);
-HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL,ULONG*);
-HRESULT WINAPI VarUI4FromI1(signed char,ULONG*);
-HRESULT WINAPI VarUI4FromUI2(USHORT,ULONG*);
-HRESULT WINAPI VarUI4FromUI8(ULONG64,ULONG*);
-HRESULT WINAPI VarUI4FromCy(CY,ULONG*);
-HRESULT WINAPI VarUI4FromDec(DECIMAL*,ULONG*);
-HRESULT WINAPI VarUI4FromDisp(IDispatch*,LCID,ULONG*);
-
-HRESULT WINAPI VarUI8FromUI1(BYTE,ULONG64*);
-HRESULT WINAPI VarUI8FromI2(SHORT,ULONG64*);
-HRESULT WINAPI VarUI8FromI4(LONG,ULONG64*);
-HRESULT WINAPI VarUI8FromI8(LONG64,ULONG64*);
-HRESULT WINAPI VarUI8FromR4(FLOAT,ULONG64*);
-HRESULT WINAPI VarUI8FromR8(DOUBLE,ULONG64*);
-HRESULT WINAPI VarUI8FromDate(DATE,ULONG64*);
-HRESULT WINAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*);
-HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*);
-HRESULT WINAPI VarUI8FromI1(signed char,ULONG64*);
-HRESULT WINAPI VarUI8FromUI2(USHORT,ULONG64*);
-HRESULT WINAPI VarUI8FromUI4(ULONG,ULONG64*);
-HRESULT WINAPI VarUI8FromDec(DECIMAL*,ULONG64*);
+HRESULT WINAPI VarUI2FromDate(DATE, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromI1(signed char, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromUI4(ULONG, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromUI8(ULONG64, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromCy(CY, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromDec(_In_ DECIMAL*, _Out_ USHORT*);
+HRESULT WINAPI VarUI2FromDisp(_In_ IDispatch*, LCID, _Out_ USHORT*);
+
+HRESULT WINAPI VarUI4FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromUI1(BYTE, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromI2(_In_ SHORT, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromI4(LONG, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromI8(LONG64, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromR4(FLOAT, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromR8(DOUBLE, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromDate(DATE, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromI1(signed char, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromUI2(USHORT, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromUI8(ULONG64, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromCy(CY, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromDec(_In_ DECIMAL*, _Out_ ULONG*);
+HRESULT WINAPI VarUI4FromDisp(_In_ IDispatch*, LCID, _Out_ ULONG*);
+
+HRESULT WINAPI VarUI8FromUI1(BYTE, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromI2(SHORT, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromI4(LONG, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromI8(LONG64, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromR4(FLOAT, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromR8(DOUBLE, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromDate(DATE, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromI1(signed char, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromUI2(USHORT, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromUI4(ULONG, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromDec(_In_ DECIMAL*, _Out_ ULONG64*);
 HRESULT WINAPI VarUI8FromInt(INT,ULONG64*);
-HRESULT WINAPI VarUI8FromCy(CY,ULONG64*);
-HRESULT WINAPI VarUI8FromDisp(IDispatch*,LCID,ULONG64*);
-
-HRESULT WINAPI VarDecFromUI1(BYTE,DECIMAL*);
-HRESULT WINAPI VarDecFromI2(SHORT,DECIMAL*);
-HRESULT WINAPI VarDecFromI4(LONG,DECIMAL*);
-HRESULT WINAPI VarDecFromI8(LONG64,DECIMAL*);
-HRESULT WINAPI VarDecFromR4(FLOAT,DECIMAL*);
-HRESULT WINAPI VarDecFromR8(DOUBLE,DECIMAL*);
-HRESULT WINAPI VarDecFromDate(DATE,DECIMAL*);
-HRESULT WINAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*);
-HRESULT WINAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*);
-HRESULT WINAPI VarDecFromI1(signed char,DECIMAL*);
-HRESULT WINAPI VarDecFromUI2(USHORT,DECIMAL*);
-HRESULT WINAPI VarDecFromUI4(ULONG,DECIMAL*);
-HRESULT WINAPI VarDecFromUI8(ULONG64,DECIMAL*);
-HRESULT WINAPI VarDecFromCy(CY,DECIMAL*);
-HRESULT WINAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*);
+HRESULT WINAPI VarUI8FromCy(CY, _Out_ ULONG64*);
+HRESULT WINAPI VarUI8FromDisp(_In_ IDispatch*, LCID, _Out_ ULONG64*);
+
+HRESULT WINAPI VarDecFromUI1(_In_ BYTE, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromI2(_In_ SHORT, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromI4(_In_ LONG, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromI8(LONG64, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromR4(_In_ FLOAT, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromR8(_In_ DOUBLE, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromDate(_In_ DATE, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromBool(_In_ VARIANT_BOOL, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromI1(_In_ signed char, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromUI2(_In_ USHORT, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromUI4(_In_ ULONG, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromUI8(ULONG64, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromCy(_In_ CY, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFromDisp(_In_ IDispatch*, _In_ LCID, _Out_ DECIMAL*);
 
 #define VarUI4FromUI4( in,pOut ) ( *(pOut) =  (in) )
 #define VarI4FromI4( in,pOut )   ( *(pOut) =  (in) )
@@ -540,62 +655,62 @@ HRESULT WINAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*);
 #define VARCMP_GT   2
 #define VARCMP_NULL 3
 
-HRESULT WINAPI VarR4CmpR8(float,double);
-
-HRESULT WINAPI VarR8Pow(double,double,double*);
-HRESULT WINAPI VarR8Round(double,int,double*);
-
-HRESULT WINAPI VarDecAbs(const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecAdd(const DECIMAL*,const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecCmp(const DECIMAL*,const DECIMAL*);
-HRESULT WINAPI VarDecCmpR8(const DECIMAL*,DOUBLE);
-HRESULT WINAPI VarDecDiv(const DECIMAL*,const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecFix(const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecInt(const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecMul(const DECIMAL*,const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecNeg(const DECIMAL*,DECIMAL*);
-HRESULT WINAPI VarDecRound(const DECIMAL*,int,DECIMAL*);
-HRESULT WINAPI VarDecSub(const DECIMAL*,const DECIMAL*,DECIMAL*);
-
-HRESULT WINAPI VarCyAbs(const CY,CY*);
-HRESULT WINAPI VarCyAdd(const CY,const CY,CY*);
-HRESULT WINAPI VarCyCmp(const CY,const CY);
-HRESULT WINAPI VarCyCmpR8(const CY,DOUBLE);
-HRESULT WINAPI VarCyFix(const CY,CY*);
-HRESULT WINAPI VarCyInt(const CY,CY*);
-HRESULT WINAPI VarCyMul(const CY,CY,CY*);
-HRESULT WINAPI VarCyMulI4(const CY,LONG,CY*);
-HRESULT WINAPI VarCyMulI8(const CY,LONG64,CY*);
-HRESULT WINAPI VarCyNeg(const CY,CY*);
-HRESULT WINAPI VarCyRound(const CY,INT,CY*);
-HRESULT WINAPI VarCySub(const CY,const CY,CY*);
-
-HRESULT WINAPI VarAdd(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarAnd(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarCat(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarDiv(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarEqv(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarIdiv(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarImp(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarMod(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarMul(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarOr(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarPow(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarSub(LPVARIANT,LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarXor(LPVARIANT,LPVARIANT,LPVARIANT);
-
-HRESULT WINAPI VarAbs(LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarFix(LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarInt(LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarNeg(LPVARIANT,LPVARIANT);
-HRESULT WINAPI VarNot(LPVARIANT,LPVARIANT);
-
-HRESULT WINAPI VarRound(LPVARIANT,int,LPVARIANT);
-
-HRESULT WINAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG);
-
-HRESULT WINAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG);
-HRESULT WINAPI VarBstrCat(BSTR,BSTR,BSTR*);
+HRESULT WINAPI VarR4CmpR8(_In_ float, _In_ double);
+
+HRESULT WINAPI VarR8Pow(_In_ double, _In_ double, _Out_ double*);
+HRESULT WINAPI VarR8Round(_In_ double, _In_ int, _Out_ double*);
+
+HRESULT WINAPI VarDecAbs(_In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecAdd(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecCmp(_In_ const DECIMAL*, _In_ const DECIMAL*);
+HRESULT WINAPI VarDecCmpR8(_In_ const DECIMAL*, _In_ DOUBLE);
+HRESULT WINAPI VarDecDiv(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecFix(_In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecInt(_In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecMul(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecNeg(_In_ const DECIMAL*, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecRound(_In_ const DECIMAL*, int, _Out_ DECIMAL*);
+HRESULT WINAPI VarDecSub(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*);
+
+HRESULT WINAPI VarCyAbs(_In_ const CY, _Out_ CY*);
+HRESULT WINAPI VarCyAdd(_In_ const CY, _In_ const CY, _Out_ CY*);
+HRESULT WINAPI VarCyCmp(_In_ const CY, _In_ const CY);
+HRESULT WINAPI VarCyCmpR8(_In_ const CY, _In_ DOUBLE);
+HRESULT WINAPI VarCyFix(_In_ const CY, _Out_ CY*);
+HRESULT WINAPI VarCyInt(_In_ const CY, _Out_ CY*);
+HRESULT WINAPI VarCyMul(_In_ const CY, _In_ CY, _Out_ CY*);
+HRESULT WINAPI VarCyMulI4(_In_ const CY, _In_ LONG, _Out_ CY*);
+HRESULT WINAPI VarCyMulI8(_In_ const CY, _In_ LONG64, _Out_ CY*);
+HRESULT WINAPI VarCyNeg(_In_ const CY, _Out_ CY*);
+HRESULT WINAPI VarCyRound(_In_ const CY, _In_ INT, _Out_ CY*);
+HRESULT WINAPI VarCySub(_In_ const CY, _In_ const CY, _Out_ CY*);
+
+HRESULT WINAPI VarAdd(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarAnd(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarCat(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarDiv(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarEqv(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarIdiv(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarImp(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarMod(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarMul(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarOr(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarPow(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarSub(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarXor(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT);
+
+HRESULT WINAPI VarAbs(_In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarFix(_In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarInt(_In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarNeg(_In_ LPVARIANT, _Out_ LPVARIANT);
+HRESULT WINAPI VarNot(_In_ LPVARIANT, _Out_ LPVARIANT);
+
+HRESULT WINAPI VarRound(_In_ LPVARIANT, _In_ int, _Out_ LPVARIANT);
+
+HRESULT WINAPI VarCmp(_In_ LPVARIANT, _In_ LPVARIANT, _In_ LCID, _In_ ULONG);
+
+HRESULT WINAPI VarBstrCmp(_In_ BSTR, _In_ BSTR, _In_ LCID, _In_ ULONG);
+HRESULT WINAPI VarBstrCat(_In_ BSTR, _In_ BSTR, _Out_ BSTR*);
 
 
 typedef struct {
@@ -643,32 +758,131 @@ typedef struct
 #define VTBIT_CY      (1 << VT_CY)
 #define VTBIT_DECIMAL (1 << VT_DECIMAL)
 
-HRESULT WINAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*);
-HRESULT WINAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*);
-
-INT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*);
-INT WINAPI VariantTimeToDosDateTime(double,USHORT*,USHORT*);
-
-INT WINAPI VariantTimeToSystemTime(DOUBLE,LPSYSTEMTIME);
-INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME,double*);
-
-HRESULT WINAPI VarDateFromUdate(UDATE*,ULONG,DATE*);
-HRESULT WINAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*);
-HRESULT WINAPI VarUdateFromDate(DATE,ULONG,UDATE*);
+_Check_return_
+HRESULT
+WINAPI
+VarParseNumFromStr(
+  _In_ OLECHAR*,
+  _In_ LCID,
+  _In_ ULONG,
+  _Out_ NUMPARSE*,
+  _Out_ BYTE*);
+
+_Check_return_
+HRESULT
+WINAPI
+VarNumFromParseNum(
+  _In_ NUMPARSE*,
+  _In_ BYTE*,
+  _In_ ULONG,
+  _Out_ VARIANT*);
+
+INT WINAPI DosDateTimeToVariantTime(_In_ USHORT, _In_ USHORT, _Out_ double*);
+INT WINAPI VariantTimeToDosDateTime(_In_ double, _Out_ USHORT*, _Out_ USHORT*);
+
+INT WINAPI VariantTimeToSystemTime(_In_ DOUBLE, _Out_ LPSYSTEMTIME);
+INT WINAPI SystemTimeToVariantTime(_In_ LPSYSTEMTIME, _Out_ double*);
+
+_Check_return_
+HRESULT
+WINAPI
+VarDateFromUdate(
+  _In_ UDATE*,
+  _In_ ULONG,
+  _Out_ DATE*);
+
+HRESULT
+WINAPI
+VarDateFromUdateEx(
+  _In_ UDATE*,
+  _In_ LCID,
+  _In_ ULONG,
+  _Out_ DATE*);
+
+_Check_return_
+HRESULT
+WINAPI
+VarUdateFromDate(
+  _In_ DATE,
+  _In_ ULONG,
+  _Out_ UDATE*);
 
 /* Variant formatting */
-HRESULT WINAPI VarWeekdayName(int,int,int,ULONG,BSTR*);
-HRESULT WINAPI VarMonthName(int,int,ULONG,BSTR*);
-HRESULT WINAPI GetAltMonthNames(LCID,LPOLESTR**);
-
-HRESULT WINAPI VarFormat(LPVARIANT,LPOLESTR,int,int,ULONG,BSTR*);
-HRESULT WINAPI VarFormatCurrency(LPVARIANT,int,int,int,int,ULONG,BSTR*);
-HRESULT WINAPI VarFormatDateTime(LPVARIANT,int,ULONG,BSTR*);
-HRESULT WINAPI VarFormatNumber(LPVARIANT,int,int,int,int,ULONG,BSTR*);
-HRESULT WINAPI VarFormatPercent(LPVARIANT,int,int,int,int,ULONG,BSTR*);
-
-HRESULT WINAPI VarFormatFromTokens(LPVARIANT,LPOLESTR,LPBYTE,ULONG,BSTR*,LCID);
-HRESULT WINAPI VarTokenizeFormatString(LPOLESTR,LPBYTE,int,int,int,LCID,int*);
+HRESULT WINAPI VarWeekdayName(int, int, int, ULONG, _Out_ BSTR*);
+HRESULT WINAPI VarMonthName(int, int, ULONG, _Out_ BSTR*);
+
+_Check_return_
+HRESULT
+WINAPI
+GetAltMonthNames(
+  LCID,
+  _Outptr_result_buffer_maybenull_(13) LPOLESTR**);
+
+HRESULT
+WINAPI
+VarFormat(
+  _In_ LPVARIANT,
+  _In_opt_ LPOLESTR,
+  int,
+  int,
+  ULONG,
+  _Out_ BSTR*);
+
+HRESULT
+WINAPI
+VarFormatCurrency(
+  _In_ LPVARIANT,
+  int,
+  int,
+  int,
+  int,
+  ULONG,
+  _Out_ BSTR*);
+
+HRESULT WINAPI VarFormatDateTime(_In_ LPVARIANT, int, ULONG, _Out_ BSTR*);
+
+HRESULT
+WINAPI
+VarFormatNumber(
+  _In_ LPVARIANT,
+  int,
+  int,
+  int,
+  int,
+  ULONG,
+  _Out_ BSTR*);
+
+HRESULT
+WINAPI
+VarFormatPercent(
+  _In_ LPVARIANT,
+  int,
+  int,
+  int,
+  int,
+  ULONG,
+  _Out_ BSTR*);
+
+HRESULT
+WINAPI
+VarFormatFromTokens(
+  _In_ LPVARIANT,
+  _In_opt_ LPOLESTR,
+  LPBYTE,
+  ULONG,
+  _Out_ BSTR*,
+  LCID);
+
+HRESULT
+WINAPI
+VarTokenizeFormatString(
+  _In_opt_ LPOLESTR,
+  _Inout_ LPBYTE,
+  int,
+  int,
+  int,
+  LCID,
+  _In_opt_ int*);
 
 
 /*
@@ -709,14 +923,66 @@ typedef enum tagREGKIND
     REGKIND_NONE
 } REGKIND;
 
-HRESULT WINAPI DispGetParam(DISPPARAMS*,UINT,VARTYPE,VARIANT*,UINT*);
-HRESULT WINAPI DispGetIDsOfNames(ITypeInfo*,OLECHAR**,UINT,DISPID*);
-HRESULT WINAPI DispInvoke(void*,ITypeInfo*,DISPID,WORD,DISPPARAMS*,VARIANT*,
-                          EXCEPINFO*,UINT*);
-HRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA*,LCID,ITypeInfo**);
-HRESULT WINAPI CreateStdDispatch(IUnknown*,void*,ITypeInfo*,IUnknown**);
-HRESULT WINAPI DispCallFunc(void*,ULONG_PTR,CALLCONV,VARTYPE,UINT,VARTYPE*,
-                            VARIANTARG**,VARIANT*);
+_Check_return_
+HRESULT
+WINAPI
+DispGetParam(
+  _In_ DISPPARAMS*,
+  UINT,
+  VARTYPE,
+  _Out_ VARIANT*,
+  _Out_opt_ UINT*);
+
+_Check_return_
+HRESULT
+WINAPI
+DispGetIDsOfNames(
+  ITypeInfo*,
+  _In_reads_(cNames) OLECHAR**,
+  UINT cNames,
+  _Out_writes_(cNames) DISPID*);
+
+_Check_return_
+HRESULT
+WINAPI
+DispInvoke(
+  void*,
+  ITypeInfo*,
+  DISPID,
+  WORD,
+  DISPPARAMS*,
+  VARIANT*,
+  EXCEPINFO*,
+  UINT*);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateDispTypeInfo(
+  INTERFACEDATA*,
+  LCID,
+  ITypeInfo**);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateStdDispatch(
+  IUnknown*,
+  void*,
+  ITypeInfo*,
+  IUnknown**);
+
+HRESULT
+WINAPI
+DispCallFunc(
+  void*,
+  ULONG_PTR,
+  CALLCONV,
+  VARTYPE,
+  UINT,
+  VARTYPE*,
+  VARIANTARG**,
+  VARIANT*);
 
 
 /*
@@ -742,14 +1008,62 @@ ULONG WINAPI LHashValOfNameSys(SYSKIND,LCID,LPCOLESTR);
 #define LOAD_TLB_AS_64BIT       0x40
 #define MASK_TO_RESET_TLB_BITS  ~(LOAD_TLB_AS_32BIT|LOAD_TLB_AS_64BIT)
 
-HRESULT WINAPI CreateTypeLib(SYSKIND,const OLECHAR*,ICreateTypeLib**);
-HRESULT WINAPI CreateTypeLib2(SYSKIND,LPCOLESTR,ICreateTypeLib2**);
-HRESULT WINAPI LoadRegTypeLib(REFGUID,WORD,WORD,LCID,ITypeLib**);
-HRESULT WINAPI LoadTypeLib(const OLECHAR*,ITypeLib**);
-HRESULT WINAPI LoadTypeLibEx(LPCOLESTR,REGKIND,ITypeLib**);
+_Check_return_
+HRESULT
+WINAPI
+CreateTypeLib(
+  SYSKIND,
+  const OLECHAR*,
+  ICreateTypeLib**);
+
+_Check_return_
+HRESULT
+WINAPI
+CreateTypeLib2(
+  SYSKIND,
+  LPCOLESTR,
+  ICreateTypeLib2**);
+
+_Check_return_
+HRESULT
+WINAPI
+LoadRegTypeLib(
+  REFGUID,
+  WORD,
+  WORD,
+  LCID,
+  ITypeLib**);
+
+HRESULT WINAPI LoadTypeLib(_In_z_ const OLECHAR*, ITypeLib**);
+_Check_return_ HRESULT WINAPI LoadTypeLibEx(LPCOLESTR, REGKIND, ITypeLib**);
 HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID,WORD,WORD,LCID,LPBSTR);
-HRESULT WINAPI RegisterTypeLib(ITypeLib*,OLECHAR*,OLECHAR*);
-HRESULT WINAPI UnRegisterTypeLib(REFGUID,WORD,WORD,LCID,SYSKIND);
+
+_Check_return_
+HRESULT
+WINAPI
+RegisterTypeLib(
+  ITypeLib*,
+  _In_ OLECHAR*,
+  _In_opt_ OLECHAR*);
+
+_Check_return_
+HRESULT
+WINAPI
+UnRegisterTypeLib(
+  REFGUID,
+  WORD,
+  WORD,
+  LCID,
+  SYSKIND);
+
+HRESULT
+WINAPI
+RegisterTypeLibForUser(
+  ITypeLib*,
+  _In_ OLECHAR*,
+  _In_opt_ OLECHAR*);
+
+HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND);
 
 VOID WINAPI ClearCustData(LPCUSTDATA);
 
index 29fff5a..38f8be3 100644 (file)
@@ -744,20 +744,38 @@ DECL_WINELIB_TYPE_AW(LPOLEUICHANGESOURCE)
 DECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_
+        _In_ REFIID riid,
+        _Outptr_ void** ppvObject) PURE;
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IOleUILinkContainerA methods ***/
-    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
-    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
-    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,
-                ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
-    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,
-                LPSTR *lplpszFullLinkType,  LPSTR *lplpszShortLinkType,
-                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
-    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD_(DWORD,GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _In_ DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _Out_ DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _In_ LPSTR lpszDisplayName,
+        _In_ ULONG lenFileName,
+        _Out_ ULONG *pchEaten,
+        _In_ BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszDisplayName,
+        _Out_ ULONG *lplenFileName,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszFullLinkType,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszShortLinkType,
+        _Out_ BOOL *lpfSourceAvailable,
+        _Out_ BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_
+        _In_ DWORD dwLink,
+        _In_ BOOL fErrorMessage,
+        _In_ BOOL fReserved) PURE;
     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
 };
 #undef INTERFACE
@@ -766,20 +784,38 @@ DECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown)
 DECLARE_INTERFACE_(IOleUILinkContainerW,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_
+        _In_ REFIID riid,
+        _Outptr_ void** ppvObject) PURE;
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IOleUILinkContainerW methods ***/
-    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD dwUpdateOpt) PURE;
-    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD *lpdwUpdateOpt) PURE;
-    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink,  LPWSTR lpszDisplayName,
-                ULONG lenFileName,  ULONG *pchEaten,  BOOL fValidateSource) PURE;
-    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,
-                LPWSTR *lplpszFullLinkType,  LPWSTR *lplpszShortLinkType,
-                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
-    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD_(DWORD,GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _In_ DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _Out_ DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _In_ LPWSTR lpszDisplayName,
+        _In_ ULONG lenFileName,
+        _Out_ ULONG *pchEaten,
+        _In_ BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszDisplayName,
+        _Out_ ULONG *lplenFileName,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszFullLinkType,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszShortLinkType,
+        _Out_ BOOL *lpfSourceAvailable,
+        _Out_ BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_
+        _In_ DWORD dwLink,
+        _In_ BOOL fErrorMessage,
+        _In_ BOOL fReserved) PURE;
     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
 };
 #undef INTERFACE
@@ -812,23 +848,43 @@ DECL_WINELIB_TYPE_AW(LPOLEUILINKCONTAINER)
 DECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(HRESULT, QueryInterface)(THIS_
+        _In_ REFIID riid,
+        _Outptr_ void** ppvObject) PURE;
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IOleUILinkContainerA methods ***/
-    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
-    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
-    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,
-                ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
-    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,
-                LPSTR *lplpszFullLinkType,  LPSTR *lplpszShortLinkType,
-                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
-    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD_(DWORD, GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _In_ DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _Out_ DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _In_ LPSTR lpszDisplayName,
+        _In_ ULONG lenFileName,
+        _Out_ ULONG *pchEaten,
+        _In_ BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszDisplayName,
+        _Out_ ULONG *lplenFileName,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszFullLinkType,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszShortLinkType,
+        _Out_ BOOL *lpfSourceAvailable,
+        _Out_ BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_
+        _In_ DWORD dwLink,
+        _In_ BOOL fErrorMessage,
+        _In_ BOOL fReserved) PURE;
     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
     /*** IOleUILinkInfoA methods ***/
-    STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink,  FILETIME *lpLastUpdate) PURE;
+    STDMETHOD(GetLastUpdate)(THIS_
+        _In_ DWORD dwLink,
+        _Out_ FILETIME *lpLastUpdate) PURE;
 };
 #undef INTERFACE
 
@@ -836,23 +892,43 @@ DECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA)
 DECLARE_INTERFACE_(IOleUILinkInfoW,IOleUILinkContainerW)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_
+        _In_ REFIID riid,
+        _Outptr_ void** ppvObject) PURE;
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IOleUILinkContainerW methods ***/
-    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD dwUpdateOpt) PURE;
-    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD *lpdwUpdateOpt) PURE;
-    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink,  LPWSTR lpszDisplayName,
-                ULONG lenFileName,  ULONG *pchEaten,  BOOL fValidateSource) PURE;
-    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,
-                LPWSTR *lplpszFullLinkType,  LPWSTR *lplpszShortLinkType,
-                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
-    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
-    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD_(DWORD, GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _In_ DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_
+        _In_ DWORD dwLink,
+        _Out_ DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _In_ LPWSTR lpszDisplayName,
+        _In_ ULONG lenFileName,
+        _Out_ ULONG *pchEaten,
+        _In_ BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_
+        _In_ DWORD dwLink,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszDisplayName,
+        _Out_ ULONG *lplenFileName,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszFullLinkType,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszShortLinkType,
+        _Out_ BOOL *lpfSourceAvailable,
+        _Out_ BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_
+        _In_ DWORD dwLink,
+        _In_ BOOL fErrorMessage,
+        _In_ BOOL fReserved) PURE;
     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
     /*** IOleUILinkInfoW methods ***/
-    STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink,  FILETIME *lpLastUpdate) PURE;
+    STDMETHOD(GetLastUpdate)(THIS_
+        _In_ DWORD dwLink,
+        _Out_ FILETIME *lpLastUpdate) PURE;
 };
 #undef  INTERFACE
 
@@ -886,18 +962,40 @@ DECL_WINELIB_TYPE_AW(LPOLEUILINKINFO)
 DECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_
+        _In_ REFIID riid,
+        _Outptr_ void** ppvObject) PURE;
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IOleUIObjInfoA methods ***/
-    STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPSTR *lplpszLabel,
-                LPSTR *lplpszType, LPSTR *lplpszShortType, LPSTR *lplpszLocation) PURE;
-    STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,
-                CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;
-    STDMETHOD(ConvertObject)(THIS_ DWORD dwObject,  REFCLSID clsidNew) PURE;
-    STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;
-    STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,
-                INT nCurrentScale, BOOL bRelativeToOrig) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_
+        _In_ DWORD dwObject,
+        _Out_ DWORD *lpdwObjSize,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszLabel,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszType,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszShortType,
+        _Outptr_opt_result_maybenull_ LPSTR *lplpszLocation) PURE;
+    STDMETHOD(GetConvertInfo)(THIS_
+        _In_ DWORD dwObject,
+        _Out_ CLSID *lpClassID,
+        _Out_ WORD *lpwFormat,
+        _Out_ CLSID *lpConvertDefaultClassID,
+        _Outptr_result_maybenull_ LPCLSID *lplpClsidExclude,
+        _Out_opt_ UINT *lpcClsidExclude) PURE;
+    STDMETHOD(ConvertObject)(THIS_
+        _In_ DWORD dwObject,
+        _In_ REFCLSID clsidNew) PURE;
+    STDMETHOD(GetViewInfo)(THIS_
+        _In_ DWORD dwObject,
+        _In_opt_ HGLOBAL *phMetaPict,
+        _In_opt_ DWORD *pdvAspect,
+        _In_opt_ INT *pnCurrentScale) PURE;
+    STDMETHOD(SetViewInfo)(THIS_
+        _In_ DWORD dwObject,
+        _In_ HGLOBAL hMetaPict,
+        _In_ DWORD dvAspect,
+        _In_ INT nCurrentScale,
+        _In_ BOOL bRelativeToOrig) PURE;
 };
 #undef INTERFACE
 
@@ -905,18 +1003,40 @@ DECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown)
 DECLARE_INTERFACE_(IOleUIObjInfoW,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_
+        _In_ REFIID riid,
+        _Outptr_ void** ppvObject) PURE;
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IOleUIObjInfoW methods ***/
-    STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPWSTR *lplpszLabel,
-                LPWSTR *lplpszType,  LPWSTR *lplpszShortType,  LPWSTR *lplpszLocation) PURE;
-    STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,
-                CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;
-    STDMETHOD(ConvertObject)(THIS_ DWORD dwObject,  REFCLSID clsidNew) PURE;
-    STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;
-    STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,
-                INT nCurrentScale, BOOL bRelativeToOrig) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_
+        _In_ DWORD dwObject,
+        _Out_ DWORD *lpdwObjSize,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszLabel,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszType,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszShortType,
+        _Outptr_opt_result_maybenull_ LPWSTR *lplpszLocation) PURE;
+    STDMETHOD(GetConvertInfo)(THIS_
+        _In_ DWORD dwObject,
+        _Out_ CLSID *lpClassID,
+        _Out_ WORD *lpwFormat,
+        _Out_ CLSID *lpConvertDefaultClassID,
+        _Outptr_result_maybenull_ LPCLSID *lplpClsidExclude,
+        _Out_opt_ UINT *lpcClsidExclude) PURE;
+    STDMETHOD(ConvertObject)(THIS_
+        _In_ DWORD dwObject,
+        _In_ REFCLSID clsidNew) PURE;
+    STDMETHOD(GetViewInfo)(THIS_
+        _In_ DWORD dwObject,
+        _In_opt_ HGLOBAL *phMetaPict,
+        _In_opt_ DWORD *pdvAspect,
+        _In_opt_ INT *pnCurrentScale) PURE;
+    STDMETHOD(SetViewInfo)(THIS_
+        _In_ DWORD dwObject,
+        _In_ HGLOBAL hMetaPict,
+        _In_ DWORD dvAspect,
+        _In_ INT nCurrentScale,
+        _In_ BOOL bRelativeToOrig) PURE;
 };
 #undef INTERFACE
 
@@ -937,37 +1057,76 @@ DECL_WINELIB_TYPE_AW(LPOLEUIOBJINFO)
 #define IOleUIObjInfo_SetViewInfo(p,a,b,c,d,e)         (p)->lpVtbl->SetViewInfo(p,a,b,c,d,e)
 #endif
 
-UINT WINAPI  OleUIInsertObjectW(LPOLEUIINSERTOBJECTW);
-UINT WINAPI  OleUIInsertObjectA(LPOLEUIINSERTOBJECTA);
+UINT WINAPI  OleUIInsertObjectW(_In_ LPOLEUIINSERTOBJECTW);
+UINT WINAPI  OleUIInsertObjectA(_In_ LPOLEUIINSERTOBJECTA);
 #define      OleUIInsertObject WINELIB_NAME_AW(OleUIInsertObject)
-UINT WINAPI  OleUIConvertA(LPOLEUICONVERTA);
-UINT WINAPI  OleUIConvertW(LPOLEUICONVERTW);
+UINT WINAPI  OleUIConvertA(_In_ LPOLEUICONVERTA);
+UINT WINAPI  OleUIConvertW(_In_ LPOLEUICONVERTW);
 #define      OleUIConvert WINELIB_NAME_AW(OleUIConvert)
-UINT WINAPI  OleUIChangeIconA(LPOLEUICHANGEICONA);
-UINT WINAPI  OleUIChangeIconW(LPOLEUICHANGEICONW);
+UINT WINAPI  OleUIChangeIconA(_In_ LPOLEUICHANGEICONA);
+UINT WINAPI  OleUIChangeIconW(_In_ LPOLEUICHANGEICONW);
 #define      OleUIChangeIcon WINELIB_NAME_AW(OleUIChangeIcon)
-UINT WINAPI  OleUIBusyA(LPOLEUIBUSYA);
-UINT WINAPI  OleUIBusyW(LPOLEUIBUSYW);
+UINT WINAPI  OleUIBusyA(_In_ LPOLEUIBUSYA);
+UINT WINAPI  OleUIBusyW(_In_ LPOLEUIBUSYW);
 #define      OleUIBusy WINELIB_NAME_AW(OleUIBusy)
-UINT WINAPI  OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA);
-UINT WINAPI  OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW);
+UINT WINAPI  OleUIObjectPropertiesA(_In_ LPOLEUIOBJECTPROPSA);
+UINT WINAPI  OleUIObjectPropertiesW(_In_ LPOLEUIOBJECTPROPSW);
 #define      OleUIObjectProperties WINELIB_NAME_AW(OleUIObjectProperties)
-UINT WINAPI  OleUIChangeSourceW(LPOLEUICHANGESOURCEW);
-UINT WINAPI  OleUIChangeSourceA(LPOLEUICHANGESOURCEA);
+UINT WINAPI  OleUIChangeSourceW(_In_ LPOLEUICHANGESOURCEW);
+UINT WINAPI  OleUIChangeSourceA(_In_ LPOLEUICHANGESOURCEA);
 #define      OleUIChangeSource WINELIB_NAME_AW(OleUIChangeSource)
-UINT WINAPI  OleUIEditLinksA(LPOLEUIEDITLINKSA lpOleUIEditLinks);
-UINT WINAPI  OleUIEditLinksW(LPOLEUIEDITLINKSW lpOleUIEditLinks);
+UINT WINAPI  OleUIEditLinksA(_In_ LPOLEUIEDITLINKSA lpOleUIEditLinks);
+UINT WINAPI  OleUIEditLinksW(_In_ LPOLEUIEDITLINKSW lpOleUIEditLinks);
 #define      OleUIEditLinks WINELIB_NAME_AW(OleUIEditLinks)
-BOOL WINAPI  OleUIUpdateLinksA(LPOLEUILINKCONTAINERA lpOleUILinkCntr, HWND hwndParent, LPSTR lpszTitle, INT cLinks);
-BOOL WINAPI  OleUIUpdateLinksW(LPOLEUILINKCONTAINERW lpOleUILinkCntr, HWND hwndParent, LPWSTR lpszTitle, INT cLinks);
-#define      OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks)
-BOOL WINAPI  OleUIAddVerbMenuA(LPOLEOBJECT lpOleObj, LPCSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
-  BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);
-BOOL WINAPI  OleUIAddVerbMenuW(LPOLEOBJECT lpOleObj, LPCWSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
-  BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);
-#define      OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu)
-UINT WINAPI  OleUIPasteSpecialA(LPOLEUIPASTESPECIALA lpOleUIPasteSpecial);
-UINT WINAPI  OleUIPasteSpecialW(LPOLEUIPASTESPECIALW lpOleUIPasteSpecial);
+
+BOOL
+WINAPI
+OleUIUpdateLinksA(
+  _In_ LPOLEUILINKCONTAINERA lpOleUILinkCntr,
+  _In_ HWND hwndParent,
+  _In_ LPSTR lpszTitle,
+  _In_ INT cLinks);
+
+BOOL
+WINAPI
+OleUIUpdateLinksW(
+  _In_ LPOLEUILINKCONTAINERW lpOleUILinkCntr,
+  _In_ HWND hwndParent,
+  _In_ LPWSTR lpszTitle,
+  _In_ INT cLinks);
+
+#define OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks)
+
+BOOL
+WINAPI
+OleUIAddVerbMenuA(
+  _In_opt_ LPOLEOBJECT lpOleObj,
+  _In_opt_ LPCSTR lpszShortType,
+  _In_ HMENU hMenu,
+  _In_ UINT uPos,
+  _In_ UINT uIDVerbMin,
+  _In_ UINT uIDVerbMax,
+  _In_ BOOL bAddConvert,
+  _In_ UINT idConvert,
+  _Out_ HMENU *lphMenu);
+
+BOOL
+WINAPI
+OleUIAddVerbMenuW(
+  _In_opt_ LPOLEOBJECT lpOleObj,
+  _In_opt_ LPCWSTR lpszShortType,
+  _In_ HMENU hMenu,
+  _In_ UINT uPos,
+  _In_ UINT uIDVerbMin,
+  _In_ UINT uIDVerbMax,
+  _In_ BOOL bAddConvert,
+  _In_ UINT idConvert,
+  _Out_ HMENU *lphMenu);
+
+#define OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu)
+
+UINT WINAPI  OleUIPasteSpecialA(_In_ LPOLEUIPASTESPECIALA lpOleUIPasteSpecial);
+UINT WINAPI  OleUIPasteSpecialW(_In_ LPOLEUIPASTESPECIALW lpOleUIPasteSpecial);
 #define      OleUIPasteSpecial WINELIB_NAME_AW(OleUIPasteSpecial)
 INT  __cdecl OleUIPromptUserA(INT,HWND, ...);
 INT  __cdecl OleUIPromptUserW(INT,HWND, ...);
index 06ef54c..c4479d4 100644 (file)
@@ -704,7 +704,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
 #define _Inout_updates_bytes_to_opt_(size,count)                    _SAL2_NAME(_Inout_updates_bytes_to_opt_) _Group_(_Out_writes_bytes_to_opt_(size,count) [SA_Pre(Valid=SA_Yes)] [SA_Pre(ValidBytes="\n" _SA_SPECSTRIZE(count))])
 #define _Inout_updates_opt_(size)                                   _SAL2_NAME(_Inout_updates_opt_) _Group_(_Pre_opt_cap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)])
 #define _Inout_updates_opt_z_(size)                                 _SAL2_NAME(_Inout_updates_opt_z_) _Group_(_Pre_opt_cap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)] [SA_Pre(NullTerminated=SA_Yes)] [SA_Post(NullTerminated=SA_Yes)])
-//#define _Inout_updates_to_(size,count)
+#define _Inout_updates_to_(size,count)                              _SAL2_NAME(_Inout_updates_to_) _Group_(_Out_writes_to_(size,count) [SA_Pre(Valid=SA_Yes)] [SA_Pre(ValidElements="\n" _SA_SPECSTRIZE(count))])
 //#define _Inout_updates_to_opt_(size,count)
 #define _Inout_updates_z_(size)                                     _SAL2_NAME(_Inout_updates_z_) _Group_(_Pre_cap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)] [SA_Pre(NullTerminated=SA_Yes)] [SA_Post(NullTerminated=SA_Yes)])
 #define _Inout_z_                                                   _SAL2_NAME(_Inout_z_) _Group_(_Prepost_z_)
@@ -869,7 +869,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
 #define _Post_maybenull_                                            _SAL2_NAME(_Post_maybenull_) _Group_([SA_Post(Null=SA_Maybe)])
 #define _Post_maybez_                                               _SAL11_NAME(_Post_maybez_) _Group_([SA_Post(NullTerminated=SA_Maybe)])
 #define _Post_notnull_                                              _SAL2_NAME(_Post_notnull_) _Group_([SA_Post(Null=SA_No)])
-//#define _Post_null_
+#define _Post_null_                                                 _SAL2_NAME(_Post_null_) _Group_([SA_Post(Null=SA_Yes)])
 #define _Post_ptr_invalid_                                          _SAL2_NAME(_Post_ptr_invalid_) _Group_([SA_Post(Valid=SA_No)])
 #define _Post_readable_byte_size_(size)                             _SAL2_NAME(_Post_readable_byte_size_) _Group_([SA_Post(ValidBytes="\n" _SA_SPECSTRIZE(size))] [SA_Post(Valid=SA_Yes)])
 #define _Post_readable_size_(size)                                  _SAL2_NAME(_Post_readable_size_) _Group_([SA_Post(ValidElements="\n" _SA_SPECSTRIZE(size))] [SA_Post(Valid=SA_Yes)])
@@ -1003,7 +1003,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
 //#define _Ret_maybenull_z_
 #define _Ret_notnull_                                               _SAL2_NAME(_Ret_notnull_) _Group_([SA_Post(Null=SA_No)])
 //#define _Ret_null_
-//#define _Ret_opt_
+#define _Ret_opt_                                                   _Ret_opt_valid_
 #define _Ret_opt_bytecap_(size)                                     _SAL11_NAME(_Ret_opt_bytecap_) _Group_([SA_Post(Null=SA_Maybe,Notref=1)] [SA_Post(WritableBytes="\n" _SA_SPECSTRIZE(size))])
 //#define _Ret_opt_bytecap_c_(size)
 //#define _Ret_opt_bytecap_x_(size)
@@ -1016,7 +1016,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
 //#define _Ret_opt_count_(size)
 //#define _Ret_opt_count_c_(size)
 //#define _Ret_opt_count_x_(size)
-//#define _Ret_opt_valid_
+#define _Ret_opt_valid_                                             _SAL11_NAME(_Ret_opt_valid_) _Group_([SA_Post(Null=SA_Maybe,Notref=1)] [SA_Post(Valid=SA_Yes)])
 #define _Ret_opt_z_                                                 _SAL11_NAME(_Ret_opt_z_) _Group_([SA_Post(Null=SA_Maybe,NullTerminated=SA_Yes)] [SA_Post(Valid=SA_Yes)] )
 //#define _Ret_opt_z_bytecap_(size)
 //#define _Ret_opt_z_bytecount_(size)
@@ -1030,7 +1030,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
 //#define _Ret_writes_bytes_to_(size,count)
 //#define _Ret_writes_bytes_to_maybenull_(size,count)
 //#define _Ret_writes_maybenull_(size)
-//#define _Ret_writes_maybenull_z_(size)
+#define _Ret_writes_maybenull_z_(size)                              _SAL2_NAME(_Ret_writes_maybenull_z_) _Group_([SA_Post(Null=SA_Maybe,ValidElements="\n" _SA_SPECSTRIZE(size),NullTerminated=SA_Yes)] [SA_Post(Valid=SA_Yes)])
 //#define _Ret_writes_to_(size,count)
 //#define _Ret_writes_to_maybenull_(size,count)
 //#define _Ret_writes_z_(size)
index a25109e..b4c2c13 100644 (file)
@@ -369,46 +369,223 @@ typedef struct _SHNAMEMAPPINGW {
 #define SHGNLI_NOUNIQUE    0x04
 #define SHGNLI_NOLNK       0x08
 
-BOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT);
-BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT);
-
-LPWSTR * WINAPI CommandLineToArgvW(LPCWSTR,int*);
-void WINAPI DragAcceptFiles(HWND,BOOL);
-void WINAPI DragFinish(HDROP);
-UINT WINAPI DragQueryFileA(HDROP,UINT,LPSTR,UINT);
-UINT WINAPI DragQueryFileW(HDROP,UINT,LPWSTR,UINT);
-BOOL WINAPI DragQueryPoint(HDROP,LPPOINT);
-HICON WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,PWORD);
-HICON WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,PWORD);
-HICON WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);
-HICON WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);
-UINT WINAPI ExtractIconExA(LPCSTR,int,HICON*,HICON*,UINT);
-UINT WINAPI ExtractIconExW(LPCWSTR,int,HICON*,HICON*,UINT);
-HINSTANCE WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);
-HINSTANCE WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);
-UINT_PTR WINAPI SHAppBarMessage(DWORD,PAPPBARDATA);
-BOOL WINAPI Shell_NotifyIconA(DWORD,PNOTIFYICONDATAA);
-BOOL WINAPI Shell_NotifyIconW(DWORD,PNOTIFYICONDATAW);
-int WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
-int WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
-int WINAPI ShellMessageBoxA(HINSTANCE,HWND,LPCSTR,LPCSTR,UINT,...);
-int WINAPI ShellMessageBoxW(HINSTANCE,HWND,LPCWSTR,LPCWSTR,UINT,...);
-HINSTANCE WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);
-HINSTANCE WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);
-BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA);
-BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW);
-int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA);
-int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW);
-void WINAPI SHFreeNameMappings(HANDLE);
-DWORD_PTR WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
-DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
-BOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT);
-BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT);
-HRESULT WINAPI SHQueryRecycleBinA(LPCSTR, LPSHQUERYRBINFO);
-HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR, LPSHQUERYRBINFO);
-HRESULT WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD);
-HRESULT WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD);
-BOOL WINAPI SHCreateProcessAsUserW(PSHCREATEPROCESSINFOW);
+LPWSTR * WINAPI CommandLineToArgvW(_In_ LPCWSTR, _Out_ int*);
+void WINAPI DragAcceptFiles(_In_ HWND, _In_ BOOL);
+void WINAPI DragFinish(_In_ HDROP);
+
+_Success_(return != 0)
+UINT
+WINAPI
+DragQueryFileA(
+  _In_ HDROP hDrop,
+  _In_ UINT iFile,
+  _Out_writes_opt_(cch) LPSTR lpszFile,
+  _In_ UINT cch);
+
+_Success_(return != 0)
+UINT
+WINAPI
+DragQueryFileW(
+  _In_ HDROP hDrop,
+  _In_ UINT iFile,
+  _Out_writes_opt_(cch) LPWSTR lpszFile,
+  _In_ UINT cch);
+
+BOOL WINAPI DragQueryPoint(_In_ HDROP, _Out_ LPPOINT);
+
+HICON
+WINAPI
+ExtractAssociatedIconA(
+  _Reserved_ HINSTANCE hInst,
+  _Inout_updates_(128) LPSTR pszIconPath,
+  _Inout_ WORD *piIcon);
+
+HICON
+WINAPI
+ExtractAssociatedIconW(
+  _Reserved_ HINSTANCE hInst,
+  _Inout_updates_(128) LPWSTR pszIconPath,
+  _Inout_ WORD *piIcon);
+
+HICON
+WINAPI
+ExtractIconA(
+  _Reserved_ HINSTANCE hInst,
+  _In_ LPCSTR pszExeFileName,
+  UINT nIconIndex);
+
+HICON
+WINAPI
+ExtractIconW(
+  _Reserved_ HINSTANCE hInst,
+  _In_ LPCWSTR pszExeFileName,
+  UINT nIconIndex);
+
+UINT
+WINAPI
+ExtractIconExA(
+  _In_ LPCSTR lpszFile,
+  _In_ int nIconIndex,
+  _Out_writes_opt_(nIcons) HICON *phiconLarge,
+  _Out_writes_opt_(nIcons) HICON *phiconSmall,
+  _In_ UINT nIcons);
+
+UINT
+WINAPI
+ExtractIconExW(
+  _In_ LPCWSTR lpszFile,
+  _In_ int nIconIndex,
+  _Out_writes_opt_(nIcons) HICON *phiconLarge,
+  _Out_writes_opt_(nIcons) HICON *phiconSmall,
+  _In_ UINT nIcons);
+
+_Success_(return > 32)
+HINSTANCE
+WINAPI
+FindExecutableA(
+  _In_ LPCSTR lpFile,
+  _In_opt_ LPCSTR lpDirectory,
+  _Out_writes_(MAX_PATH) LPSTR lpResult);
+
+_Success_(return > 32)
+HINSTANCE
+WINAPI
+FindExecutableW(
+  _In_ LPCWSTR lpFile,
+  _In_opt_ LPCWSTR lpDirectory,
+  _Out_writes_(MAX_PATH) LPWSTR lpResult);
+
+UINT_PTR WINAPI SHAppBarMessage(_In_ DWORD, _Inout_ PAPPBARDATA);
+BOOL WINAPI Shell_NotifyIconA(_In_ DWORD, _In_ PNOTIFYICONDATAA);
+BOOL WINAPI Shell_NotifyIconW(_In_ DWORD, _In_ PNOTIFYICONDATAW);
+
+int
+WINAPI
+ShellAboutA(
+  _In_opt_ HWND hWnd,
+  _In_ LPCSTR szApp,
+  _In_opt_ LPCSTR szOtherStuff,
+  _In_opt_ HICON hIcon);
+
+int
+WINAPI
+ShellAboutW(
+  _In_opt_ HWND hWnd,
+  _In_ LPCWSTR szApp,
+  _In_opt_ LPCWSTR szOtherStuff,
+  _In_opt_ HICON hIcon);
+
+int
+WINAPI
+ShellMessageBoxA(
+  _In_opt_ HINSTANCE hAppInst,
+  _In_opt_ HWND hWnd,
+  _In_ LPCSTR lpcText,
+  _In_opt_ LPCSTR lpcTitle,
+  _In_ UINT fuStyle,
+  ...);
+
+int
+WINAPI
+ShellMessageBoxW(
+  _In_opt_ HINSTANCE hAppInst,
+  _In_opt_ HWND hWnd,
+  _In_ LPCWSTR lpcText,
+  _In_opt_ LPCWSTR lpcTitle,
+  _In_ UINT fuStyle,
+  ...);
+
+HINSTANCE
+WINAPI
+ShellExecuteA(
+  _In_opt_ HWND hwnd,
+  _In_opt_ LPCSTR lpOperation,
+  _In_ LPCSTR lpFile,
+  _In_opt_ LPCSTR lpParameters,
+  _In_opt_ LPCSTR lpDirectory,
+  _In_ INT nShowCmd);
+
+HINSTANCE
+WINAPI
+ShellExecuteW(
+  _In_opt_ HWND hwnd,
+  _In_opt_ LPCWSTR lpOperation,
+  _In_ LPCWSTR lpFile,
+  _In_opt_ LPCWSTR lpParameters,
+  _In_opt_ LPCWSTR lpDirectory,
+  _In_ INT nShowCmd);
+
+BOOL WINAPI ShellExecuteExA(_Inout_ LPSHELLEXECUTEINFOA);
+BOOL WINAPI ShellExecuteExW(_Inout_ LPSHELLEXECUTEINFOW);
+int WINAPI SHFileOperationA(_Inout_ LPSHFILEOPSTRUCTA);
+int WINAPI SHFileOperationW(_Inout_ LPSHFILEOPSTRUCTW);
+void WINAPI SHFreeNameMappings(_In_opt_ HANDLE);
+
+DWORD_PTR
+WINAPI
+SHGetFileInfoA(
+  _In_ LPCSTR pszPath,
+  DWORD dwFileAttributes,
+  _Inout_updates_bytes_opt_(cbFileInfo) SHFILEINFOA *psfi,
+  UINT cbFileInfo,
+  UINT uFlags);
+
+DWORD_PTR
+WINAPI
+SHGetFileInfoW(
+  _In_ LPCWSTR pszPath,
+  DWORD dwFileAttributes,
+  _Inout_updates_bytes_opt_(cbFileInfo) SHFILEINFOW *psfi,
+  UINT cbFileInfo,
+  UINT uFlags);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+SHGetNewLinkInfoA(
+  _In_ LPCSTR pszLinkTo,
+  _In_ LPCSTR pszDir,
+  _Out_writes_(MAX_PATH) LPSTR pszName,
+  _Out_ BOOL *pfMustCopy,
+  _In_ UINT uFlags);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+SHGetNewLinkInfoW(
+  _In_ LPCWSTR pszLinkTo,
+  _In_ LPCWSTR pszDir,
+  _Out_writes_(MAX_PATH) LPWSTR pszName,
+  _Out_ BOOL *pfMustCopy,
+  _In_ UINT uFlags);
+
+HRESULT
+WINAPI
+SHQueryRecycleBinA(
+  _In_opt_ LPCSTR pszRootPath,
+  _Inout_ LPSHQUERYRBINFO pSHQueryRBInfo);
+
+HRESULT
+WINAPI
+SHQueryRecycleBinW(
+  _In_opt_ LPCWSTR pszRootPath,
+  _Inout_ LPSHQUERYRBINFO pSHQueryRBInfo);
+
+HRESULT
+WINAPI
+SHEmptyRecycleBinA(
+  _In_opt_ HWND hwnd,
+  _In_opt_ LPCSTR pszRootPath,
+  DWORD dwFlags);
+
+HRESULT
+WINAPI
+SHEmptyRecycleBinW(
+  _In_opt_ HWND hwnd,
+  _In_opt_ LPCWSTR pszRootPath,
+  DWORD dwFlags);
+
+BOOL WINAPI SHCreateProcessAsUserW(_Inout_ PSHCREATEPROCESSINFOW);
 
 DWORD
 WINAPI
@@ -444,7 +621,6 @@ typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING;
 #define ShellMessageBox ShellMessageBoxW
 #define SHFileOperation SHFileOperationW
 #define SHGetFileInfo SHGetFileInfoW
-#define SHGetNewLinkInfo SHGetNewLinkInfoW
 #define SHQueryRecycleBin SHQueryRecycleBinW
 #define SHEmptyRecycleBin SHEmptyRecycleBinW
 #define SHGetNewLinkInfo SHGetNewLinkInfoW
@@ -472,7 +648,6 @@ typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING;
 #define ShellMessageBox ShellMessageBoxA
 #define SHFileOperation SHFileOperationA
 #define SHGetFileInfo SHGetFileInfoA
-#define SHGetNewLinkInfo SHGetNewLinkInfoA
 #define SHQueryRecycleBin SHQueryRecycleBinA
 #define SHEmptyRecycleBin SHEmptyRecycleBinA
 #define SHGetNewLinkInfo SHGetNewLinkInfoA
index 5982494..ec885fa 100644 (file)
@@ -81,46 +81,171 @@ typedef struct
 DECLARE_HANDLE(HPSXA);
 #endif
 
-UINT         WINAPI SHAddFromPropSheetExtArray(HPSXA,LPFNADDPROPSHEETPAGE,LPARAM);
+UINT
+WINAPI
+SHAddFromPropSheetExtArray(
+  _In_ HPSXA,
+  _In_ LPFNADDPROPSHEETPAGE,
+  LPARAM);
+
 LPVOID       WINAPI SHAlloc(SIZE_T) __WINE_ALLOC_SIZE(1);
-HRESULT      WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);
-HPSXA        WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);
+
+HRESULT
+WINAPI
+SHCoCreateInstance(
+  _In_opt_ LPCWSTR,
+  _In_opt_ const CLSID*,
+  _In_opt_ IUnknown*,
+  _In_ REFIID,
+  _Outptr_ LPVOID*);
+
+HPSXA        WINAPI SHCreatePropSheetExtArray(_In_ HKEY, _In_opt_ LPCWSTR, UINT);
 HPSXA        WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
-HRESULT      WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
-DWORD        WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);
-DWORD        WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);
+
+HRESULT
+WINAPI
+SHCreateShellItem(
+  _In_opt_ LPCITEMIDLIST,
+  _In_opt_ IShellFolder*,
+  _In_ LPCITEMIDLIST,
+  _Outptr_ IShellItem**);
+
+DWORD        WINAPI SHCLSIDFromStringA(_In_ LPCSTR, _Out_ CLSID*);
+DWORD        WINAPI SHCLSIDFromStringW(_In_ LPCWSTR, _Out_ CLSID*);
 #define             SHCLSIDFromString WINELIB_NAME_AW(SHCLSIDFromString)
-HRESULT      WINAPI SHCreateStdEnumFmtEtc(UINT,const FORMATETC *,IEnumFORMATETC**);
-void         WINAPI SHDestroyPropSheetExtArray(HPSXA);
-BOOL         WINAPI SHFindFiles(LPCITEMIDLIST,LPCITEMIDLIST);
-DWORD        WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);
-void         WINAPI SHFree(LPVOID);
-BOOL         WINAPI GetFileNameFromBrowse(HWND,LPWSTR,UINT,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
-HRESULT      WINAPI SHGetInstanceExplorer(IUnknown**);
-VOID         WINAPI SHSetInstanceExplorer (IUnknown*);
-HRESULT      WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
-HRESULT      WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
-#define             SHGetFolderPathAndSubDir WINELIB_NAME_AW(SHGetFolderPathAndSubDir);
-BOOL         WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
-BOOL         WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
-#define             SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
-INT          WINAPI SHHandleUpdateImage(LPCITEMIDLIST);
-HRESULT      WINAPI SHILCreateFromPath(LPCWSTR,LPITEMIDLIST*,DWORD*);
+
+HRESULT
+WINAPI
+SHCreateStdEnumFmtEtc(
+  _In_ UINT cfmt,
+  _In_reads_(cfmt) const FORMATETC *,
+  _Outptr_ IEnumFORMATETC**);
+
+void         WINAPI SHDestroyPropSheetExtArray(_In_ HPSXA);
+BOOL         WINAPI SHFindFiles(_In_opt_ LPCITEMIDLIST, _In_opt_ LPCITEMIDLIST);
+DWORD        WINAPI SHFormatDrive(_In_ HWND, UINT, UINT, UINT);
+void         WINAPI SHFree(_In_opt_ LPVOID);
+
+BOOL
+WINAPI
+GetFileNameFromBrowse(
+  _In_opt_ HWND,
+  _Inout_updates_(cchFilePath) LPWSTR,
+  UINT cchFilePath,
+  _In_opt_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR);
+
+_Check_return_ HRESULT WINAPI SHGetInstanceExplorer(_Outptr_ IUnknown**);
+
+VOID         WINAPI SHSetInstanceExplorer(_In_opt_ IUnknown*);
+
+HRESULT
+WINAPI
+SHGetFolderPathAndSubDirA(
+  _Reserved_ HWND,
+  _In_ int,
+  _In_opt_ HANDLE,
+  _In_ DWORD,
+  _In_opt_ LPCSTR, _Out_writes_(MAX_PATH) LPSTR);
+
+HRESULT
+WINAPI
+SHGetFolderPathAndSubDirW(
+  _Reserved_ HWND,
+  _In_ int,
+  _In_opt_ HANDLE,
+  _In_ DWORD,
+  _In_opt_ LPCWSTR,
+  _Out_writes_(MAX_PATH) LPWSTR);
+
+#define SHGetFolderPathAndSubDir WINELIB_NAME_AW(SHGetFolderPathAndSubDir);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+SHGetPathFromIDListA(
+  _In_ LPCITEMIDLIST,
+  _Out_writes_(MAX_PATH) LPSTR);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+SHGetPathFromIDListW(
+  _In_ LPCITEMIDLIST,
+  _Out_writes_(MAX_PATH) LPWSTR);
+
+#define SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
+
+INT          WINAPI SHHandleUpdateImage(_In_ LPCITEMIDLIST);
+
+HRESULT
+WINAPI
+SHILCreateFromPath(
+  _In_ LPCWSTR,
+  _Outptr_ LPITEMIDLIST*,
+  _Inout_opt_ DWORD*);
+
 HRESULT      WINAPI SHLoadOLE(LPARAM);
-HRESULT      WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST*,SFGAOF,SFGAOF*);
-HRESULT      WINAPI SHPathPrepareForWriteA(HWND,IUnknown*,LPCSTR,DWORD);
-HRESULT      WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD);
-#define             SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite);
-UINT         WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM);
+
+HRESULT
+WINAPI
+SHParseDisplayName(
+  _In_ LPCWSTR,
+  _In_opt_ IBindCtx*,
+  _Outptr_ LPITEMIDLIST*,
+  _In_ SFGAOF,
+  _Out_opt_ SFGAOF*);
+
+HRESULT
+WINAPI
+SHPathPrepareForWriteA(
+  _In_opt_ HWND,
+  _In_opt_ IUnknown*,
+  _In_ LPCSTR, DWORD);
+
+HRESULT
+WINAPI
+SHPathPrepareForWriteW(
+  _In_opt_ HWND,
+  _In_opt_ IUnknown*,
+  _In_ LPCWSTR, DWORD);
+
+#define SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite);
+
+UINT
+WINAPI
+SHReplaceFromPropSheetExtArray(
+  _In_ HPSXA,
+  UINT,
+  _In_ LPFNADDPROPSHEETPAGE,
+  LPARAM);
+
 LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR);
-int          WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*);
+
+int
+WINAPI
+SHMapPIDLToSystemImageListIndex(
+  _In_ IShellFolder*,
+  _In_ LPCITEMIDLIST,
+  _Out_opt_ int*);
+
 HRESULT      WINAPI SHStartNetConnectionDialog(HWND,LPCSTR,DWORD);
-VOID         WINAPI SHUpdateImageA(LPCSTR,INT,UINT,INT);
-VOID         WINAPI SHUpdateImageW(LPCWSTR,INT,UINT,INT);
-INT          WINAPI PickIconDlg(HWND,LPWSTR,UINT,int *);
+VOID         WINAPI SHUpdateImageA(_In_ LPCSTR, INT, UINT, INT);
+VOID         WINAPI SHUpdateImageW(_In_ LPCWSTR, INT, UINT, INT);
+
+INT
+WINAPI
+PickIconDlg(
+  _In_opt_ HWND,
+  _Inout_updates_(cchIconPath) LPWSTR,
+  UINT cchIconPath,
+  _Inout_opt_ int *);
+
 #define             SHUpdateImage WINELIB_NAME_AW(SHUpdateImage)
-int          WINAPI RestartDialog(HWND,LPCWSTR,DWORD);
-int          WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD);
+int          WINAPI RestartDialog(_In_opt_ HWND, _In_opt_ LPCWSTR, DWORD);
+int          WINAPI RestartDialogEx(_In_opt_ HWND, _In_opt_ LPCWSTR, DWORD, DWORD);
 BOOL         WINAPI IsUserAnAdmin(void);
 
 #define SHFMT_ERROR     0xFFFFFFFFL  /* Error on last format, drive may be formattable */
@@ -146,7 +271,13 @@ BOOL         WINAPI IsUserAnAdmin(void);
 #define SHOP_FILEPATH    0x02
 #define SHOP_VOLUMEGUID  0x04
 
-BOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR);
+BOOL
+WINAPI
+SHObjectProperties(
+  _In_opt_ HWND,
+  _In_ DWORD,
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR);
 
 #define PCS_FATAL           0x80000000
 #define PCS_REPLACEDCHAR    0x00000001
@@ -154,7 +285,7 @@ BOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR);
 #define PCS_TRUNCATED       0x00000004
 #define PCS_PATHTOOLONG     0x00000008
 
-int WINAPI PathCleanupSpec(LPCWSTR,LPWSTR);
+int WINAPI PathCleanupSpec(_In_opt_ LPCWSTR, _Inout_ LPWSTR);
 
 /*****************************************************************************
  * IContextMenu interface
@@ -394,7 +525,7 @@ DECLARE_INTERFACE_(IShellDetails, IUnknown)
     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IShellDetails methods ***/
-    STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE;
+    STDMETHOD(GetDetailsOf)(THIS_ _In_opt_ PCUITEMID_CHILD pidl, UINT iColumn, _Out_ SHELLDETAILS *pDetails) PURE;
     STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;
 };
 #undef INTERFACE
@@ -418,8 +549,8 @@ DECLARE_INTERFACE_(IQueryInfo,IUnknown)
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IQueryInfo methods ***/
-    STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR** lppTips) PURE;
-    STDMETHOD(GetInfoFlags)(THIS_ DWORD* lpFlags) PURE;
+    STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, _Outptr_ WCHAR** lppTips) PURE;
+    STDMETHOD(GetInfoFlags)(THIS_ _Out_ DWORD* lpFlags) PURE;
 };
 #undef INTERFACE
 
@@ -490,8 +621,8 @@ DECLARE_INTERFACE_(IObjMgr,IUnknown)
     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IObjMgr methods ***/
-    STDMETHOD(Append)(THIS_ LPUNKNOWN punk) PURE;
-    STDMETHOD(Remove)(THIS_ LPUNKNOWN punk) PURE;
+    STDMETHOD(Append)(THIS_ _In_ LPUNKNOWN punk) PURE;
+    STDMETHOD(Remove)(THIS_ _In_ LPUNKNOWN punk) PURE;
 };
 #undef INTERFACE
 
@@ -514,7 +645,7 @@ DECLARE_INTERFACE_(IACList,IUnknown)
     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IACList methods ***/
-    STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
+    STDMETHOD(Expand)(THIS_ _In_ LPCOLESTR str) PURE;
 };
 #undef INTERFACE
 
@@ -539,7 +670,7 @@ DECLARE_INTERFACE_(IACList2,IACList)
     STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
     /*** IACList2 methods ***/
     STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;
-    STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE;
+    STDMETHOD(GetOptions)(THIS_ _Out_ DWORD* pdwFlag) PURE;
 };
 #undef INTERFACE
 
@@ -605,33 +736,33 @@ DECLARE_INTERFACE_(IShellFolderView, IUnknown)
 
     /*** IShellFolderView methods ***/
     STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE;
-    STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE;
+    STDMETHOD(GetArrangeParam) (THIS_ _Out_ LPARAM *plParamSort) PURE;
     STDMETHOD(ArrangeGrid) (THIS) PURE;
     STDMETHOD(AutoArrange) (THIS) PURE;
     STDMETHOD(GetAutoArrange) (THIS) PURE;
-    STDMETHOD(AddObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
-    STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE;
-    STDMETHOD(RemoveObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
-    STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE;
+    STDMETHOD(AddObject) (THIS_ _In_ PITEMID_CHILD pidl, _Out_ UINT *puItem) PURE;
+    STDMETHOD(GetObject) (THIS_ _Outptr_ PITEMID_CHILD *ppidl, UINT uItem) PURE;
+    STDMETHOD(RemoveObject) (THIS_ _In_opt_ PITEMID_CHILD pidl, _Out_ UINT *puItem) PURE;
+    STDMETHOD(GetObjectCount) (THIS_ _Out_ UINT *puCount) PURE;
     STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE;
-    STDMETHOD(UpdateObject) (THIS_ PITEMID_CHILD pidlOld, PITEMID_CHILD pidlNew, UINT *puItem) PURE;
-    STDMETHOD(RefreshObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+    STDMETHOD(UpdateObject) (THIS_ _In_ PITEMID_CHILD pidlOld, _In_ PITEMID_CHILD pidlNew, _Out_ UINT *puItem) PURE;
+    STDMETHOD(RefreshObject) (THIS_ _In_ PITEMID_CHILD pidl, _Out_ UINT *puItem) PURE;
     STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE;
-    STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE;
-    STDMETHOD(GetSelectedObjects) (THIS_ PCITEMID_CHILD **pppidl, UINT *puItems) PURE;
-    STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE;
-    STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE;
-    STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE;
-    STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE;
-    STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE;
-    STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE;
+    STDMETHOD(GetSelectedCount) (THIS_ _Out_ UINT *puSelected) PURE;
+    STDMETHOD(GetSelectedObjects) (THIS_ _Outptr_result_buffer_(*puItems) PCITEMID_CHILD **pppidl, _Out_ UINT *puItems) PURE;
+    STDMETHOD(IsDropOnSource) (THIS_ _In_opt_ IDropTarget *pDropTarget) PURE;
+    STDMETHOD(GetDragPoint) (THIS_ _Out_ POINT *ppt) PURE;
+    STDMETHOD(GetDropPoint) (THIS_ _Out_ POINT *ppt) PURE;
+    STDMETHOD(MoveIcons) (THIS_ _In_ IDataObject *pDataObject) PURE;
+    STDMETHOD(SetItemPos) (THIS_ _In_ PCUITEMID_CHILD pidl, _In_ POINT *ppt) PURE;
+    STDMETHOD(IsBkDropTarget) (THIS_ _In_opt_ IDropTarget *pDropTarget) PURE;
     STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE;
-    STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE;
-    STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE;
-    STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB** ppOldCB) PURE;
+    STDMETHOD(SetPoints) (THIS_ _In_ IDataObject *pDataObject) PURE;
+    STDMETHOD(GetItemSpacing) (THIS_ _Out_ ITEMSPACING *pSpacing) PURE;
+    STDMETHOD(SetCallback) (THIS_ _In_opt_ IShellFolderViewCB* pNewCB, _Outptr_result_maybenull_ IShellFolderViewCB** ppOldCB) PURE;
     STDMETHOD(Select) ( THIS_  UINT dwFlags ) PURE;
-    STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE;
-    STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE;
+    STDMETHOD(QuerySupport) (THIS_ _Inout_ UINT * pdwSupport) PURE;
+    STDMETHOD(SetAutomationObject)(THIS_ _In_opt_ IDispatch* pdisp) PURE;
 };
 #undef INTERFACE
 
@@ -693,16 +824,16 @@ DECLARE_INTERFACE_(IProgressDialog,IUnknown)
     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IProgressDialog methods ***/
-    STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown *punkEnableModeless, DWORD dwFlags, LPCVOID reserved) PURE;
+    STDMETHOD(StartProgressDialog)(THIS_ _In_opt_ HWND hwndParent, _In_opt_ IUnknown *punkEnableModeless, DWORD dwFlags, _Reserved_ LPCVOID reserved) PURE;
     STDMETHOD(StopProgressDialog)(THIS) PURE;
-    STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE;
-    STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstance, UINT uiResourceId) PURE;
+    STDMETHOD(SetTitle)(THIS_ _In_ LPCWSTR pwzTitle) PURE;
+    STDMETHOD(SetAnimation)(THIS_ _In_opt_ HINSTANCE hInstance, UINT uiResourceId) PURE;
     STDMETHOD_(BOOL,HasUserCancelled)(THIS) PURE;
     STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;
     STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
-    STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL bPath, LPCVOID reserved) PURE;
-    STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID reserved) PURE;
-    STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID reserved) PURE;
+    STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, _In_ LPCWSTR pwzString, BOOL bPath, _Reserved_ LPCVOID reserved) PURE;
+    STDMETHOD(SetCancelMsg)(THIS_ _In_ LPCWSTR pwzCancelMsg, _Reserved_ LPCVOID reserved) PURE;
+    STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, _Reserved_ LPCVOID reserved) PURE;
 };
 #undef INTERFACE
 
@@ -737,10 +868,10 @@ DECLARE_INTERFACE_(IDeskBarClient,IOleWindow)
     STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND*) PURE;
     STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL) PURE;
     /*** IDeskBarClient methods ***/
-    STDMETHOD_(HRESULT,SetDeskBarSite)(THIS_ IUnknown*) PURE;
+    STDMETHOD_(HRESULT,SetDeskBarSite)(THIS_ _In_opt_ IUnknown*) PURE;
     STDMETHOD_(HRESULT,SetModeDBC)(THIS_ DWORD) PURE;
     STDMETHOD_(HRESULT,UIActivateDBC)(THIS_ DWORD) PURE;
-    STDMETHOD_(HRESULT,GetSize)(THIS_ DWORD,LPRECT) PURE;
+    STDMETHOD_(HRESULT,GetSize)(THIS_ DWORD, _Out_ LPRECT) PURE;
 };
 #undef INTERFACE
 
@@ -775,7 +906,7 @@ DECLARE_INTERFACE_(IDeskBarClient,IOleWindow)
 #define SHARD_PATHW     0x00000003L
 #define SHARD_PATH WINELIB_NAME_AW(SHARD_PATH)
 
-void WINAPI SHAddToRecentDocs(UINT,LPCVOID);
+void WINAPI SHAddToRecentDocs(UINT, _In_opt_ LPCVOID);
 
 /****************************************************************************
  * SHBrowseForFolder API
@@ -846,9 +977,10 @@ typedef struct tagBROWSEINFOW {
 #define BFFM_SETOKTEXT          (WM_USER+105)
 #define BFFM_SETEXPANDED        (WM_USER+106)
 
-LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);
-LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);
-#define SHBrowseForFolder       WINELIB_NAME_AW(SHBrowseForFolder)
+LPITEMIDLIST WINAPI SHBrowseForFolderA(_In_ LPBROWSEINFOA lpbi);
+LPITEMIDLIST WINAPI SHBrowseForFolderW(_In_ LPBROWSEINFOW lpbi);
+#define SHBrowseForFolder WINELIB_NAME_AW(SHBrowseForFolder)
+
 #define BFFM_SETSTATUSTEXT  WINELIB_NAME_AW(BFFM_SETSTATUSTEXT)
 #define BFFM_SETSELECTION   WINELIB_NAME_AW(BFFM_SETSELECTION)
 #define BFFM_VALIDATEFAILED WINELIB_NAME_AW(BFFM_VALIDATEFAILED)
@@ -857,13 +989,14 @@ LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);
  * SHCreateShellFolderViewEx API
  */
 
-typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)(
-       IShellView* dwUser,
-       IShellFolder* pshf,
-       HWND hWnd,
-       UINT uMsg,
-       WPARAM wParam,
-       LPARAM lParam);
+typedef HRESULT
+(CALLBACK *LPFNVIEWCALLBACK)(
+  _In_ IShellView* dwUser,
+  _In_ IShellFolder* pshf,
+  _In_ HWND hWnd,
+  UINT uMsg,
+  WPARAM wParam,
+  LPARAM lParam);
 
 #include <pshpack8.h>
 
@@ -880,7 +1013,11 @@ typedef struct _CSFV
 
 #include <poppack.h>
 
-HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv);
+HRESULT
+WINAPI
+SHCreateShellFolderViewEx(
+  _In_ LPCSFV pshfvi,
+  _Outptr_ IShellView **ppshv);
 
 /* SHCreateShellFolderViewEx callback messages */
 #define SFVM_MERGEMENU                 1
@@ -952,7 +1089,11 @@ typedef struct _SFV_CREATE
 
 #include <poppack.h>
 
-HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv);
+HRESULT
+WINAPI
+SHCreateShellFolderView(
+  _In_ const SFV_CREATE *pscfv,
+  _Outptr_ IShellView **ppsv);
 
 /* Types and definitions for the SFM_* parameters */
 #include <pshpack8.h>
@@ -1000,10 +1141,12 @@ typedef struct _TBINFO
 *      SHShellFolderView_Message API
 */
 
-LRESULT WINAPI SHShellFolderView_Message(
-       HWND hwndCabinet,
-       UINT uMessage,
-       LPARAM lParam);
+LRESULT
+WINAPI
+SHShellFolderView_Message(
+  _In_ HWND hwndCabinet,
+  UINT uMessage,
+  LPARAM lParam);
 
 /* SHShellFolderView_Message messages */
 #define SFVM_REARRANGE          0x0001
@@ -1067,16 +1210,54 @@ typedef struct _SHDESCRIPTIONID
 
 #include <poppack.h>
 
-HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
-HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
-#define  SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)
-
-LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCreate);
-BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate);
-BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate);
-#define  SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)
-
-HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
+HRESULT
+WINAPI
+SHGetDataFromIDListA(
+  _In_ LPSHELLFOLDER psf,
+  _In_ LPCITEMIDLIST pidl,
+  int nFormat,
+  _Out_writes_bytes_(cb) LPVOID pv,
+  int cb);
+
+HRESULT
+WINAPI
+SHGetDataFromIDListW(
+  _In_ LPSHELLFOLDER psf,
+  _In_ LPCITEMIDLIST pidl,
+  int nFormat,
+  _Out_writes_bytes_(cb) LPVOID pv,
+  int cb);
+
+#define SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)
+
+LPITEMIDLIST
+WINAPI
+SHCloneSpecialIDList(
+  _Reserved_ HWND hwnd,
+  _In_ int csidl,
+  _In_ BOOL fCreate);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+SHGetSpecialFolderPathA(
+  _Reserved_ HWND hwndOwner,
+  _Out_writes_(MAX_PATH) LPSTR szPath,
+  _In_ int nFolder,
+  _In_ BOOL bCreate);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+SHGetSpecialFolderPathW(
+  _Reserved_ HWND hwndOwner,
+  _Out_writes_(MAX_PATH) LPWSTR szPath,
+  _In_ int nFolder,
+  _In_ BOOL bCreate);
+
+#define SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)
+
+_Check_return_ HRESULT WINAPI SHGetMalloc(_Outptr_ LPMALLOC *lpmal);
 
 /**********************************************************************
  * SHGetSetSettings ()
@@ -1141,7 +1322,7 @@ typedef struct
        UINT :15; /* Required for proper binary layout with gcc */
 } SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
 
-VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
+VOID WINAPI SHGetSettings(_Out_ LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
 
 #define SSF_SHOWALLOBJECTS             0x0001
 #define SSF_SHOWEXTENSIONS             0x0002
@@ -1520,28 +1701,75 @@ typedef struct _SHChangeProductKeyAsIDList {
     USHORT cbZero;
 } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
 
-ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
-                                    int cEntries, SHChangeNotifyEntry *pshcne);
+ULONG
+WINAPI
+SHChangeNotifyRegister(
+  _In_ HWND hwnd,
+  int fSources,
+  LONG fEvents,
+  UINT wMsg,
+  int cEntries,
+  _In_ SHChangeNotifyEntry *pshcne);
+
 BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);
-HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,
-                                        LPITEMIDLIST **pppidl, LONG *plEvent);
-BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
 
-HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);
+HANDLE
+WINAPI
+SHChangeNotification_Lock(
+  _In_ HANDLE hChangeNotification,
+  DWORD dwProcessId,
+  _Outptr_opt_result_buffer_(2)_Outptr_opt_result_buffer_(2) LPITEMIDLIST **pppidl,
+  _Out_opt_ LONG *plEvent);
+
+BOOL WINAPI SHChangeNotification_Unlock(_In_ HANDLE hLock);
+
+HRESULT
+WINAPI
+SHGetRealIDL(
+  _In_ IShellFolder *psf,
+  _In_ LPCITEMIDLIST pidlSimple,
+  _Outptr_ LPITEMIDLIST * ppidlReal);
 
 /****************************************************************************
 * SHCreateDirectory API
 */
-int WINAPI SHCreateDirectory(HWND, LPCWSTR);
-int WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);
-int WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);
-#define    SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx)
+int WINAPI SHCreateDirectory(_In_opt_ HWND, _In_ LPCWSTR);
+
+int
+WINAPI
+SHCreateDirectoryExA(
+  _In_opt_ HWND,
+  _In_ LPCSTR,
+  _In_opt_ LPSECURITY_ATTRIBUTES);
+
+int
+WINAPI
+SHCreateDirectoryExW(
+  _In_opt_ HWND,
+  _In_ LPCWSTR,
+  _In_opt_ LPSECURITY_ATTRIBUTES);
+
+#define SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx)
 
 /****************************************************************************
 * SHGetSpecialFolderLocation API
 */
-HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl);
-HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl);
+_Check_return_
+HRESULT
+WINAPI
+SHGetSpecialFolderLocation(
+  _Reserved_ HWND hwndOwner,
+  _In_ int nFolder,
+  _Outptr_ LPITEMIDLIST *ppidl);
+
+HRESULT
+WINAPI
+SHGetFolderLocation(
+  _Reserved_ HWND hwndOwner,
+  _In_ int nFolder,
+  _In_opt_ HANDLE hToken,
+  _In_ DWORD dwReserved,
+  _Outptr_ LPITEMIDLIST *ppidl);
 
 /****************************************************************************
 * SHGetFolderPath API
@@ -1551,9 +1779,25 @@ typedef enum {
     SHGFP_TYPE_DEFAULT = 1
 } SHGFP_TYPE;
 
-HRESULT WINAPI SHGetFolderPathA(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
-HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
-#define        SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath)
+HRESULT
+WINAPI
+SHGetFolderPathA(
+  _Reserved_ HWND hwnd,
+  _In_ int nFolder,
+  _In_opt_ HANDLE hToken,
+  _In_ DWORD dwFlags,
+  _Out_writes_(MAX_PATH) LPSTR pszPath);
+
+HRESULT
+WINAPI
+SHGetFolderPathW(
+  _Reserved_ HWND hwnd,
+  _In_ int nFolder,
+  _In_opt_ HANDLE hToken,
+  _In_ DWORD dwFlags,
+  _Out_writes_(MAX_PATH) LPWSTR pszPath);
+
+#define SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath)
 
 #define CSIDL_DESKTOP          0x0000
 #define CSIDL_INTERNET         0x0001
@@ -1624,21 +1868,43 @@ HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwF
 /****************************************************************************
  * SHGetDesktopFolder API
  */
-HRESULT WINAPI SHGetDesktopFolder(IShellFolder * *);
+_Check_return_ HRESULT WINAPI SHGetDesktopFolder(_Outptr_ IShellFolder * *);
 
 /****************************************************************************
  * SHBindToParent API
  */
-HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);
+HRESULT
+WINAPI
+SHBindToParent(
+  _In_ LPCITEMIDLIST pidl,
+  _In_ REFIID riid,
+  _Outptr_ LPVOID *ppv,
+  _Outptr_opt_ LPCITEMIDLIST *ppidlLast);
 
 /****************************************************************************
 * SHDefExtractIcon API
 */
-HRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags,
-                                 HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
-HRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags,
-                                 HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
-#define        SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon)
+HRESULT
+WINAPI
+SHDefExtractIconA(
+  _In_ LPCSTR pszIconFile,
+  int iIndex,
+  UINT uFlags,
+  _Out_opt_ HICON* phiconLarge,
+  _Out_opt_ HICON* phiconSmall,
+  UINT nIconSize);
+
+HRESULT
+WINAPI
+SHDefExtractIconW(
+  _In_ LPCWSTR pszIconFile,
+  int iIndex,
+  UINT uFlags,
+  _Out_opt_ HICON* phiconLarge,
+  _Out_opt_ HICON* phiconSmall,
+  UINT nIconSize);
+
+#define SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon)
 
 /*
  * DROPFILES for CF_HDROP and CF_PRINTERS
@@ -1724,8 +1990,13 @@ typedef struct {
 
 #define CABINETSTATE_VERSION 2
 
-BOOL WINAPI ReadCabinetState(CABINETSTATE *, int);
-BOOL WINAPI WriteCabinetState(CABINETSTATE *);
+BOOL
+WINAPI
+ReadCabinetState(
+  _Out_writes_bytes_(cLength) CABINETSTATE *,
+  int cLength);
+
+BOOL WINAPI WriteCabinetState(_In_ CABINETSTATE *);
 
 /****************************************************************************
  * Path Manipulation Routines
@@ -1747,9 +2018,24 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *);
 #define PRF_FIRSTDIRDEF          0x04
 #define PRF_DONTFINDLINK         0x08
 
-VOID WINAPI PathGetShortPath(LPWSTR pszPath);
-LONG WINAPI PathProcessCommand(LPCWSTR, LPWSTR, int, DWORD);
-BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR, LPCWSTR, LPCWSTR, LPCWSTR);
+VOID WINAPI PathGetShortPath(_Inout_updates_(MAX_PATH) LPWSTR pszPath);
+
+LONG
+WINAPI
+PathProcessCommand(
+  _In_ LPCWSTR,
+  _Out_writes_(cchDest) LPWSTR,
+  int cchDest,
+  DWORD);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+PathYetAnotherMakeUniqueName(
+  _Out_writes_(MAX_PATH) LPWSTR,
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR);
 
 /****************************************************************************
  * Drag And Drop Routines
@@ -1768,11 +2054,19 @@ typedef struct
 
 BOOL         WINAPI DAD_SetDragImage(HIMAGELIST,LPPOINT);
 BOOL         WINAPI DAD_DragEnterEx(HWND,POINT);
-BOOL         WINAPI DAD_DragEnterEx2(HWND,POINT,IDataObject*);
+BOOL         WINAPI DAD_DragEnterEx2(_In_ HWND, POINT, _In_opt_ IDataObject*);
 BOOL         WINAPI DAD_DragMove(POINT);
 BOOL         WINAPI DAD_DragLeave(void);
 BOOL         WINAPI DAD_AutoScroll(HWND,AUTO_SCROLL_DATA*,const POINT*);
-HRESULT      WINAPI SHDoDragDrop(HWND,IDataObject*,IDropSource*,DWORD,LPDWORD);
+
+HRESULT
+WINAPI
+SHDoDragDrop(
+  _In_opt_ HWND,
+  _In_ IDataObject*,
+  _In_opt_ IDropSource*,
+  _In_ DWORD,
+  _Out_ LPDWORD);
 
 /****************************************************************************
  * Internet shortcut properties
@@ -1791,23 +2085,23 @@ HRESULT      WINAPI SHDoDragDrop(HWND,IDataObject*,IDropSource*,DWORD,LPDWORD);
 #define PID_IS_COMMENT     13
 
 
-LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST,LPCSHITEMID,BOOL);
-LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);
-LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);
-LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR);
-LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR);
+LPITEMIDLIST WINAPI ILAppendID(_In_opt_ LPITEMIDLIST, _In_ LPCSHITEMID, BOOL);
+LPITEMIDLIST WINAPI ILClone(_In_ LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCloneFirst(_In_ LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCreateFromPathA(_In_ LPCSTR);
+LPITEMIDLIST WINAPI ILCreateFromPathW(_In_ LPCWSTR);
 #define             ILCreateFromPath WINELIB_NAME_AW(ILCreateFromPath)
-LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST,LPCITEMIDLIST);
-LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST,LPCITEMIDLIST);
-LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);
-void         WINAPI ILFree(LPITEMIDLIST);
-LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);
-UINT         WINAPI ILGetSize(LPCITEMIDLIST);
-BOOL         WINAPI ILIsEqual(LPCITEMIDLIST,LPCITEMIDLIST);
-BOOL         WINAPI ILIsParent(LPCITEMIDLIST,LPCITEMIDLIST,BOOL);
-HRESULT      WINAPI ILLoadFromStream(LPSTREAM,LPITEMIDLIST*);
-BOOL         WINAPI ILRemoveLastID(LPITEMIDLIST);
-HRESULT      WINAPI ILSaveToStream(LPSTREAM,LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCombine(_In_opt_ LPCITEMIDLIST, _In_opt_ LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindChild(_In_ LPCITEMIDLIST, _In_ LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindLastID(_In_ LPCITEMIDLIST);
+void         WINAPI ILFree(_In_opt_ LPITEMIDLIST);
+LPITEMIDLIST WINAPI ILGetNext(_In_opt_ LPCITEMIDLIST);
+UINT         WINAPI ILGetSize(_In_opt_ LPCITEMIDLIST);
+BOOL         WINAPI ILIsEqual(_In_ LPCITEMIDLIST, _In_ LPCITEMIDLIST);
+BOOL         WINAPI ILIsParent(_In_ LPCITEMIDLIST, _In_ LPCITEMIDLIST, BOOL);
+HRESULT      WINAPI ILLoadFromStream(_In_ LPSTREAM, _Inout_ LPITEMIDLIST*);
+BOOL         WINAPI ILRemoveLastID(_Inout_opt_ LPITEMIDLIST);
+HRESULT      WINAPI ILSaveToStream(_In_ LPSTREAM, _In_ LPCITEMIDLIST);
 
 
 #include <poppack.h>
@@ -1818,7 +2112,15 @@ HRESULT      WINAPI ILSaveToStream(LPSTREAM,LPCITEMIDLIST);
 #define MM_SUBMENUSHAVEIDS      0x00000002L
 #define MM_DONTREMOVESEPS       0x00000004L
 
-UINT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags);
+UINT
+WINAPI
+Shell_MergeMenus(
+  _In_ HMENU hmDst,
+  _In_ HMENU hmSrc,
+  UINT uInsert,
+  UINT uIDAdjust,
+  UINT uIDAdjustMax,
+  ULONG uFlags);
 
 
 /****************************************************************************
@@ -1838,12 +2140,37 @@ typedef struct
   const HKEY *aKeys;
 }DEFCONTEXTMENU;
 
-HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *,REFIID,void **ppv);
+HRESULT
+WINAPI
+SHCreateDefaultContextMenu(
+  _In_ const DEFCONTEXTMENU *,
+  _In_ REFIID,
+  _Outptr_ void **ppv);
+
+typedef HRESULT
+(CALLBACK * LPFNDFMCALLBACK)(
+  _In_opt_ IShellFolder*,
+  _In_opt_ HWND,
+  _In_opt_ IDataObject*,
+  UINT,
+  WPARAM,
+  LPARAM);
+
+HRESULT
+WINAPI
+CDefFolderMenu_Create2(
+  _In_opt_ LPCITEMIDLIST,
+  _In_opt_ HWND,
+  UINT cidl,
+  _In_reads_opt_(cidl) LPCITEMIDLIST*,
+  _In_opt_ IShellFolder*,
+  _In_opt_ LPFNDFMCALLBACK,
+  UINT nKeys,
+  _In_reads_opt_(nKeys) const HKEY *,
+  _Outptr_ IContextMenu **);
 
-typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder*,HWND,IDataObject*,UINT,WPARAM,LPARAM);
-HRESULT WINAPI CDefFolderMenu_Create2(LPCITEMIDLIST,HWND,UINT,LPCITEMIDLIST*,IShellFolder*,LPFNDFMCALLBACK,UINT,const HKEY *,IContextMenu **);
 /****************************************************************************
- * SHCreateDefaultContextMenu API
+ * SHCreateDefaultExtractIcon API
  */
 
 HRESULT WINAPI
@@ -1855,22 +2182,22 @@ SHCreateDefaultExtractIcon(
  */
 
 HRESULT WINAPI SHCreateDataObject(
-  LPCITEMIDLIST pidlFolder,
-  UINT cidl,
-  LPCITEMIDLIST* apidl,
-  IDataObject *pdtInner,
-  REFIID riid,
-  void **ppv);
+  _In_opt_ LPCITEMIDLIST pidlFolder,
+  _In_ UINT cidl,
+  _In_reads_opt_(cidl) LPCITEMIDLIST* apidl,
+  _In_opt_ IDataObject *pdtInner,
+  _In_ REFIID riid,
+  _Outptr_ void **ppv);
 
 /****************************************************************************
  * CIDLData_CreateFromIDArray API
  */
 
 HRESULT WINAPI CIDLData_CreateFromIDArray(
-       LPCITEMIDLIST pidlFolder,
-       UINT cidl,
-       LPCITEMIDLIST* apidl,
-       IDataObject **ppdtobj);
+  _In_ LPCITEMIDLIST pidlFolder,
+  _In_ UINT cidl,
+  _In_reads_opt_(cidl) LPCITEMIDLIST* apidl,
+  _Outptr_ IDataObject **ppdtobj);
 
 /****************************************************************************
  * SHOpenWithDialog
@@ -1896,10 +2223,11 @@ typedef struct tagOPENASINFO {
        OPEN_AS_INFO_FLAGS oaifInFlags;
 } OPENASINFO;
 
-HRESULT WINAPI SHOpenWithDialog(
-  HWND hwndParent,
-  const OPENASINFO *poainfo
-);
+HRESULT
+WINAPI
+SHOpenWithDialog(
+  _In_opt_ HWND hwndParent,
+  _In_ const OPENASINFO *poainfo);
 
 #define INTERFACE   IShellIconOverlayIdentifier
 
@@ -1909,9 +2237,9 @@ DECLARE_INTERFACE_(IShellIconOverlayIdentifier, IUnknown)
     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
     STDMETHOD_(ULONG,Release) (THIS) PURE;
 
-    STDMETHOD (IsMemberOf)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib) PURE;
-    STDMETHOD (GetOverlayInfo)(THIS_ LPWSTR pwszIconFile, int cchMax, int * pIndex, DWORD * pdwFlags) PURE;
-    STDMETHOD (GetPriority)(THIS_ int * pIPriority) PURE;
+    STDMETHOD (IsMemberOf)(THIS_ _In_ LPCWSTR pwszPath, DWORD dwAttrib) PURE;
+    STDMETHOD (GetOverlayInfo)(THIS_ _Out_writes_(cchMax) LPWSTR pwszIconFile, int cchMax, _Out_ int * pIndex, _Out_ DWORD * pdwFlags) PURE;
+    STDMETHOD (GetPriority)(THIS_ _Out_ int * pIPriority) PURE;
 };
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
@@ -1959,9 +2287,9 @@ DECLARE_INTERFACE_(IDockingWindowSite, IOleWindow)
     STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL fEnterMode) PURE;
 
     // *** IDockingWindowSite methods ***
-    STDMETHOD(GetBorderDW)(THIS_ IUnknown *punkObj, LPRECT prcBorder) PURE;
-    STDMETHOD(RequestBorderSpaceDW)(THIS_ IUnknown *punkObj, LPCBORDERWIDTHS pbw) PURE;
-    STDMETHOD(SetBorderSpaceDW)(THIS_ IUnknown *punkObj, LPCBORDERWIDTHS pbw) PURE;
+    STDMETHOD(GetBorderDW)(THIS_ _In_ IUnknown *punkObj, _Out_ LPRECT prcBorder) PURE;
+    STDMETHOD(RequestBorderSpaceDW)(THIS_ _In_ IUnknown *punkObj, _In_ LPCBORDERWIDTHS pbw) PURE;
+    STDMETHOD(SetBorderSpaceDW)(THIS_ _In_ IUnknown *punkObj, _In_ LPCBORDERWIDTHS pbw) PURE;
 };
 #undef INTERFACE
 
index e1740a9..485e763 100644 (file)
@@ -35,55 +35,205 @@ extern "C" {
 
 /* Registry functions */
 
-DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR);
-DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR);
+DWORD WINAPI SHDeleteEmptyKeyA(_In_ HKEY, _In_opt_ LPCSTR);
+DWORD WINAPI SHDeleteEmptyKeyW(_In_ HKEY, _In_opt_ LPCWSTR);
 #define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey)
 
-DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR);
-DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR);
+DWORD WINAPI SHDeleteKeyA(_In_ HKEY, _In_opt_ LPCSTR);
+DWORD WINAPI SHDeleteKeyW(_In_ HKEY, _In_opt_ LPCWSTR);
 #define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey)
 
-DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR);
-DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR);
+DWORD WINAPI SHDeleteValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_ LPCSTR);
+DWORD WINAPI SHDeleteValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ LPCWSTR);
 #define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue)
 
-DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD);
-DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD);
+DWORD
+WINAPI
+SHGetValueA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_opt_(*pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
+DWORD
+WINAPI
+SHGetValueW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_opt_(*pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
 #define SHGetValue WINELIB_NAME_AW(SHGetValue)
 
-DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);
-DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);
+DWORD
+WINAPI
+SHSetValueA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ DWORD,
+  _In_reads_bytes_opt_(cbData) LPCVOID,
+  _In_ DWORD cbData);
+
+DWORD
+WINAPI
+SHSetValueW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ DWORD,
+  _In_reads_bytes_opt_(cbData) LPCVOID,
+  _In_ DWORD cbData);
+
 #define SHSetValue WINELIB_NAME_AW(SHSetValue)
 
-DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
-DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+DWORD
+WINAPI
+SHQueryValueExA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _Reserved_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
+DWORD
+WINAPI
+SHQueryValueExW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _Reserved_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
 #define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx)
 
-LONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD);
-LONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD);
+LONG
+WINAPI
+SHEnumKeyExA(
+  _In_ HKEY,
+  _In_ DWORD,
+  _Out_writes_(*pcchName) LPSTR,
+  _Inout_ LPDWORD pcchName);
+
+LONG
+WINAPI
+SHEnumKeyExW(
+  _In_ HKEY,
+  _In_ DWORD,
+  _Out_writes_(*pcchName) LPWSTR,
+  _Inout_ LPDWORD pcchName);
+
 #define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx)
 
-LONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
-LONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+LONG
+WINAPI
+SHEnumValueA(
+  _In_ HKEY,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchValueName) LPSTR,
+  _Inout_opt_ LPDWORD pcchValueName,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
+LONG
+WINAPI
+SHEnumValueW(
+  _In_ HKEY,
+  _In_ DWORD,
+  _Out_writes_opt_(*pcchValueName) LPWSTR,
+  _Inout_opt_ LPDWORD pcchValueName,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
 #define SHEnumValue WINELIB_NAME_AW(SHEnumValue)
 
-LONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
-LONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+LONG
+WINAPI
+SHQueryInfoKeyA(
+  _In_ HKEY,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD);
+
+LONG
+WINAPI
+SHQueryInfoKeyW(
+  _In_ HKEY,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD);
+
 #define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey)
 
-DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);
-DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD);
+DWORD
+WINAPI
+SHRegGetPathA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Out_writes_(MAX_PATH) LPSTR,
+  _In_ DWORD);
+
+DWORD
+WINAPI
+SHRegGetPathW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Out_writes_(MAX_PATH) LPWSTR,
+  _In_ DWORD);
+
 #define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath)
 
-DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD);
-DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);
+DWORD
+WINAPI
+SHRegSetPathA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ DWORD);
+
+DWORD
+WINAPI
+SHRegSetPathW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ DWORD);
+
 #define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath)
 
-DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);
-DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);
+DWORD
+WINAPI
+SHCopyKeyA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_ HKEY,
+  _Reserved_ DWORD);
+
+DWORD
+WINAPI
+SHCopyKeyW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_ HKEY,
+  _Reserved_ DWORD);
+
 #define SHCopyKey WINELIB_NAME_AW(SHCopyKey)
 
-HKEY WINAPI  SHRegDuplicateHKey(HKEY);
+HKEY WINAPI  SHRegDuplicateHKey(_In_ HKEY);
 
 /* SHRegGetValue flags */
 typedef INT SRRF;
@@ -109,8 +259,28 @@ typedef INT SRRF;
 #define SRRF_ZEROONFAILURE 0x20000000
 #define SRRF_NOVIRT 0x40000000
 
-LSTATUS WINAPI SHRegGetValueA(HKEY,LPCSTR,LPCSTR,SRRF,LPDWORD,LPVOID,LPDWORD);
-LSTATUS WINAPI SHRegGetValueW(HKEY,LPCWSTR,LPCWSTR,SRRF,LPDWORD,LPVOID,LPDWORD);
+LSTATUS
+WINAPI
+SHRegGetValueA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ SRRF,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
+LSTATUS
+WINAPI
+SHRegGetValueW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ SRRF,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData);
+
 #define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue)
 
 /* Undocumented registry functions */
@@ -147,65 +317,263 @@ typedef enum
 typedef HANDLE HUSKEY;
 typedef HUSKEY *PHUSKEY;
 
-LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
-LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+LONG
+WINAPI
+SHRegCreateUSKeyA(
+  _In_ LPCSTR,
+  _In_ REGSAM,
+  _In_opt_ HUSKEY,
+  _Out_ PHUSKEY,
+  _In_ DWORD);
+
+LONG
+WINAPI
+SHRegCreateUSKeyW(
+  _In_ LPCWSTR,
+  _In_ REGSAM,
+  _In_opt_ HUSKEY,
+  _Out_ PHUSKEY,
+  _In_ DWORD);
+
 #define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey)
 
-LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
-LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+LONG
+WINAPI
+SHRegOpenUSKeyA(
+  _In_ LPCSTR,
+  _In_ REGSAM,
+  _In_opt_ HUSKEY,
+  _Out_ PHUSKEY,
+  _In_ BOOL);
+
+LONG
+WINAPI
+SHRegOpenUSKeyW(
+  _In_ LPCWSTR,
+  _In_ REGSAM,
+  _In_opt_ HUSKEY,
+  _Out_ PHUSKEY,
+  _In_ BOOL);
+
 #define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey)
 
-LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,
-                               BOOL,LPVOID,DWORD);
-LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
-                               BOOL,LPVOID,DWORD);
+LONG
+WINAPI
+SHRegQueryUSValueA(
+  _In_ HUSKEY,
+  _In_opt_ LPCSTR,
+  _Inout_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData,
+  _In_ BOOL,
+  _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID,
+  _In_opt_ DWORD dwDefaultDataSize);
+
+LONG
+WINAPI
+SHRegQueryUSValueW(
+  _In_ HUSKEY,
+  _In_opt_ LPCWSTR,
+  _Inout_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData,
+  _In_ BOOL,
+  _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID,
+  _In_opt_ DWORD dwDefaultDataSize);
+
 #define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue)
 
-LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
-LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+LONG
+WINAPI
+SHRegWriteUSValueA(
+  _In_ HUSKEY,
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _In_reads_bytes_(cbData) LPVOID,
+  _In_ DWORD cbData,
+  _In_ DWORD);
+
+LONG
+WINAPI
+SHRegWriteUSValueW(
+  _In_ HUSKEY,
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _In_reads_bytes_(cbData) LPVOID,
+  _In_ DWORD cbData,
+  _In_ DWORD);
+
 #define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue)
 
-LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
-LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+LONG
+WINAPI
+SHRegDeleteUSValueA(
+  _In_ HUSKEY,
+  _In_ LPCSTR,
+  _In_ SHREGDEL_FLAGS);
+
+LONG
+WINAPI
+SHRegDeleteUSValueW(
+  _In_ HUSKEY,
+  _In_ LPCWSTR,
+  _In_ SHREGDEL_FLAGS);
+
 #define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue)
 
-LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
-LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+LONG
+WINAPI
+SHRegDeleteEmptyUSKeyA(
+  _In_ HUSKEY,
+  _In_ LPCSTR,
+  _In_ SHREGDEL_FLAGS);
+
+LONG
+WINAPI
+SHRegDeleteEmptyUSKeyW(
+  _In_ HUSKEY,
+  _In_ LPCWSTR,
+  _In_ SHREGDEL_FLAGS);
+
 #define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey)
 
-LONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS);
-LONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS);
+LONG
+WINAPI
+SHRegEnumUSKeyA(
+  _In_ HUSKEY,
+  _In_ DWORD,
+  _Out_writes_to_(*pcchName, *pcchName) LPSTR,
+  _Inout_ LPDWORD pcchName,
+  _In_ SHREGENUM_FLAGS);
+
+LONG
+WINAPI
+SHRegEnumUSKeyW(
+  _In_ HUSKEY,
+  _In_ DWORD,
+  _Out_writes_to_(*pcchName, *pcchName) LPWSTR,
+  _Inout_ LPDWORD pcchName,
+  _In_ SHREGENUM_FLAGS);
+
 #define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey)
 
-LONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,
-                              LPVOID,LPDWORD,SHREGENUM_FLAGS);
-LONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,
-                              LPVOID,LPDWORD,SHREGENUM_FLAGS);
+LONG
+WINAPI
+SHRegEnumUSValueA(
+  _In_ HUSKEY,
+  _In_ DWORD,
+  _Out_writes_to_(*pcchValueName, *pcchValueName) LPSTR,
+  _Inout_ LPDWORD pcchValueName,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData,
+  _In_ SHREGENUM_FLAGS);
+
+LONG
+WINAPI
+SHRegEnumUSValueW(
+  _In_ HUSKEY,
+  _In_ DWORD,
+  _Out_writes_to_(*pcchValueName, *pcchValueName) LPWSTR,
+  _Inout_ LPDWORD pcchValueName,
+  _Out_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData,
+  _In_ SHREGENUM_FLAGS);
+
 #define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue)
 
-LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
-                                 LPDWORD,SHREGENUM_FLAGS);
-LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
-                                 LPDWORD,SHREGENUM_FLAGS);
+LONG
+WINAPI
+SHRegQueryInfoUSKeyA(
+  _In_ HUSKEY,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _In_ SHREGENUM_FLAGS);
+
+LONG
+WINAPI
+SHRegQueryInfoUSKeyW(
+  _In_ HUSKEY,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _Out_opt_ LPDWORD,
+  _In_ SHREGENUM_FLAGS);
+
 #define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey)
 
-LONG WINAPI SHRegCloseUSKey(HUSKEY);
+LONG WINAPI SHRegCloseUSKey(_In_ HUSKEY);
+
+LONG
+WINAPI
+SHRegGetUSValueA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Inout_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData,
+  _In_ BOOL,
+  _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID,
+  _In_ DWORD dwDefaultDataSize);
+
+LONG
+WINAPI
+SHRegGetUSValueW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Inout_opt_ LPDWORD,
+  _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID,
+  _Inout_opt_ LPDWORD pcbData,
+  _In_ BOOL,
+  _In_reads_bytes_opt_(dwDefaultDataSize) LPVOID,
+  _In_ DWORD dwDefaultDataSize);
 
-LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,
-                             BOOL,LPVOID,DWORD);
-LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
-                             BOOL,LPVOID,DWORD);
 #define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue)
 
-LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
-LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+LONG
+WINAPI
+SHRegSetUSValueA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _In_reads_bytes_opt_(cbData) LPVOID,
+  _In_opt_ DWORD cbData,
+  _In_opt_ DWORD);
+
+LONG
+WINAPI
+SHRegSetUSValueW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _In_reads_bytes_opt_(cbData) LPVOID,
+  _In_opt_ DWORD cbData,
+  _In_opt_ DWORD);
+
 #define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue)
 
-BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL);
-BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL);
+BOOL
+WINAPI
+SHRegGetBoolUSValueA(
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ BOOL,
+  _In_ BOOL);
+
+BOOL
+WINAPI
+SHRegGetBoolUSValueW(
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ BOOL,
+  _In_ BOOL);
+
 #define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue)
 
-int WINAPI SHRegGetIntW(HKEY,LPCWSTR,int);
+int WINAPI SHRegGetIntW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ int);
 
 /* IQueryAssociation and helpers */
 enum
@@ -282,11 +650,11 @@ DECLARE_INTERFACE_(IQueryAssociations,IUnknown)
     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
     STDMETHOD_(ULONG,Release)(THIS) PURE;
     /*** IQueryAssociations methods ***/
-    STDMETHOD(Init)(THIS_ ASSOCF  flags, LPCWSTR  pszAssoc, HKEY  hkProgid, HWND  hwnd) PURE;
-    STDMETHOD(GetString)(THIS_ ASSOCF  flags, ASSOCSTR  str, LPCWSTR  pszExtra, LPWSTR  pszOut, DWORD * pcchOut) PURE;
-    STDMETHOD(GetKey)(THIS_ ASSOCF  flags, ASSOCKEY  key, LPCWSTR  pszExtra, HKEY * phkeyOut) PURE;
-    STDMETHOD(GetData)(THIS_ ASSOCF  flags, ASSOCDATA  data, LPCWSTR  pszExtra, LPVOID  pvOut, DWORD * pcbOut) PURE;
-    STDMETHOD(GetEnum)(THIS_ ASSOCF  flags, ASSOCENUM  assocenum, LPCWSTR  pszExtra, REFIID  riid, LPVOID * ppvOut) PURE;
+    STDMETHOD(Init)(THIS_ _In_ ASSOCF flags, _In_opt_ LPCWSTR pszAssoc, _In_opt_ HKEY hkProgid, _In_opt_ HWND hwnd) PURE;
+    STDMETHOD(GetString)(THIS_ _In_ ASSOCF flags, _In_ ASSOCSTR str, _In_opt_ LPCWSTR pszExtra, _Out_writes_opt_(*pcchOut) LPWSTR pszOut, _Inout_ DWORD *pcchOut) PURE;
+    STDMETHOD(GetKey)(THIS_ _In_ ASSOCF flags, _In_ ASSOCKEY key, _In_opt_ LPCWSTR pszExtra, _Out_ HKEY *phkeyOut) PURE;
+    STDMETHOD(GetData)(THIS_ _In_ ASSOCF flags, _In_ ASSOCDATA data, _In_opt_ LPCWSTR pszExtra, _Out_writes_bytes_opt_(*pcbOut) LPVOID pvOut, _Inout_opt_ DWORD *pcbOut) PURE;
+    STDMETHOD(GetEnum)(THIS_ _In_ ASSOCF flags, _In_ ASSOCENUM assocenum, _In_opt_ LPCWSTR pszExtra, _In_ REFIID riid, _Outptr_ LPVOID *ppvOut) PURE;
 };
 #undef INTERFACE
 
@@ -301,26 +669,100 @@ DECLARE_INTERFACE_(IQueryAssociations,IUnknown)
 #define IQueryAssociations_GetEnum(p,a,b,c,d,e)    (p)->lpVtbl->GetEnum(p,a,b,c,d,e)
 #endif
 
-HRESULT WINAPI AssocCreate(CLSID,REFIID,LPVOID*);
+HRESULT WINAPI AssocCreate(_In_ CLSID, _In_ REFIID, _Outptr_ LPVOID*);
+
+HRESULT
+WINAPI
+AssocQueryStringA(
+  _In_ ASSOCF,
+  _In_ ASSOCSTR,
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Out_writes_opt_(*pcchOut) LPSTR,
+  _Inout_ LPDWORD pcchOut);
+
+HRESULT
+WINAPI
+AssocQueryStringW(
+  _In_ ASSOCF,
+  _In_ ASSOCSTR,
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Out_writes_opt_(*pcchOut) LPWSTR,
+  _Inout_ LPDWORD pcchOut);
 
-HRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD);
-HRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD);
 #define AssocQueryString WINELIB_NAME_AW(AssocQueryString)
 
-HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,LPDWORD);
-HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,LPDWORD);
+HRESULT
+WINAPI
+AssocQueryStringByKeyA(
+  _In_ ASSOCF,
+  _In_ ASSOCSTR,
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _Out_writes_opt_(*pcchOut) LPSTR,
+  _Inout_ LPDWORD pcchOut);
+
+HRESULT
+WINAPI
+AssocQueryStringByKeyW(
+  _In_ ASSOCF,
+  _In_ ASSOCSTR,
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _Out_writes_opt_(*pcchOut) LPWSTR,
+  _Inout_ LPDWORD pcchOut);
+
 #define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey)
 
-HRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,PHKEY);
-HRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,PHKEY);
+HRESULT
+WINAPI
+AssocQueryKeyA(
+  _In_ ASSOCF,
+  _In_ ASSOCKEY,
+  _In_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _Out_ PHKEY);
+
+HRESULT
+WINAPI
+AssocQueryKeyW(
+  _In_ ASSOCF,
+  _In_ ASSOCKEY,
+  _In_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _Out_ PHKEY);
+
 #define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey)
 
-BOOL WINAPI AssocIsDangerous(LPCWSTR);
+BOOL WINAPI AssocIsDangerous(_In_ LPCWSTR);
 
 #endif /* NO_SHLWAPI_REG */
 
-HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);
-HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut);
+void WINAPI IUnknown_Set(_Inout_ IUnknown **ppunk, _In_opt_ IUnknown *punk);
+void WINAPI IUnknown_AtomicRelease(_Inout_opt_ IUnknown **punk);
+HRESULT WINAPI IUnknown_GetWindow(_In_ IUnknown *punk, _Out_ HWND *phwnd);
+
+HRESULT
+WINAPI
+IUnknown_SetSite(
+  _In_ IUnknown *punk,
+  _In_opt_ IUnknown *punkSite);
+
+HRESULT
+WINAPI
+IUnknown_GetSite(
+  _In_ IUnknown *punk,
+  _In_ REFIID riid,
+  _Outptr_ void **ppv);
+
+HRESULT
+WINAPI
+IUnknown_QueryService(
+  _In_opt_ IUnknown *punk,
+  _In_ REFGUID guidService,
+  _In_ REFIID riid,
+  _Outptr_ void **ppvOut);
 
 /* Path functions */
 #ifndef NO_SHLWAPI_PATH
@@ -332,228 +774,366 @@ HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID
 #define GCT_WILD        0x4
 #define GCT_SEPARATOR   0x8
 
-LPSTR  WINAPI PathAddBackslashA(LPSTR);
-LPWSTR WINAPI PathAddBackslashW(LPWSTR);
+LPSTR  WINAPI PathAddBackslashA(_Inout_updates_(MAX_PATH) LPSTR);
+LPWSTR WINAPI PathAddBackslashW(_Inout_updates_(MAX_PATH) LPWSTR);
 #define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
 
-BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR);
-BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR);
+BOOL
+WINAPI
+PathAddExtensionA(
+  _Inout_updates_(MAX_PATH) LPSTR,
+  _In_opt_ LPCSTR);
+
+BOOL
+WINAPI
+PathAddExtensionW(
+  _Inout_updates_(MAX_PATH) LPWSTR,
+  _In_opt_ LPCWSTR);
+
 #define PathAddExtension WINELIB_NAME_AW(PathAddExtension)
 
-BOOL WINAPI PathAppendA(LPSTR,LPCSTR);
-BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR);
+BOOL WINAPI PathAppendA(_Inout_updates_(MAX_PATH) LPSTR, _In_ LPCSTR);
+BOOL WINAPI PathAppendW(_Inout_updates_(MAX_PATH) LPWSTR, _In_ LPCWSTR);
 #define PathAppend WINELIB_NAME_AW(PathAppend)
 
-LPSTR  WINAPI PathBuildRootA(LPSTR,int);
-LPWSTR WINAPI PathBuildRootW(LPWSTR,int);
+LPSTR  WINAPI PathBuildRootA(_Out_writes_(4) LPSTR, int);
+LPWSTR WINAPI PathBuildRootW(_Out_writes_(4) LPWSTR, int);
 #define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot)
 
-BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR);
-BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR);
+BOOL WINAPI PathCanonicalizeA(_Out_writes_(MAX_PATH) LPSTR, _In_ LPCSTR);
+BOOL WINAPI PathCanonicalizeW(_Out_writes_(MAX_PATH) LPWSTR, _In_ LPCWSTR);
 #define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
 
-LPSTR  WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR);
-LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR);
+LPSTR
+WINAPI
+PathCombineA(
+  _Out_writes_(MAX_PATH) LPSTR,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR);
+
+LPWSTR
+WINAPI
+PathCombineW(
+  _Out_writes_(MAX_PATH) LPWSTR,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR);
+
 #define PathCombine WINELIB_NAME_AW(PathCombine)
 
-BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT);
-BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT);
+BOOL
+WINAPI
+PathCompactPathA(
+  _In_opt_ HDC,
+  _Inout_updates_(MAX_PATH) LPSTR,
+  _In_ UINT);
+
+BOOL
+WINAPI
+PathCompactPathW(
+  _In_opt_ HDC,
+  _Inout_updates_(MAX_PATH) LPWSTR,
+  _In_ UINT);
+
 #define PathCompactPath WINELIB_NAME_AW(PathCompactPath)
 
-BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD);
-BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD);
+BOOL
+WINAPI
+PathCompactPathExA(
+  _Out_writes_(cchMax) LPSTR,
+  _In_ LPCSTR,
+  _In_ UINT cchMax,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+PathCompactPathExW(
+  _Out_writes_(cchMax) LPWSTR,
+  _In_ LPCWSTR,
+  _In_ UINT cchMax,
+  _In_ DWORD);
+
 #define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx)
 
-int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR);
-int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);
+int
+WINAPI
+PathCommonPrefixA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _Out_writes_opt_(MAX_PATH) LPSTR);
+
+int
+WINAPI
+PathCommonPrefixW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _Out_writes_opt_(MAX_PATH) LPWSTR);
+
 #define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix)
 
-HRESULT WINAPI PathCreateFromUrlA(LPCSTR pszUrl, LPSTR pszPath, LPDWORD pcchPath, DWORD dwReserved);
-HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved);
+HRESULT
+WINAPI
+PathCreateFromUrlA(
+  _In_ LPCSTR,
+  _Out_writes_to_(*pcchPath, *pcchPath) LPSTR,
+  _Inout_ LPDWORD pcchPath,
+  DWORD);
+
+HRESULT
+WINAPI
+PathCreateFromUrlW(
+  _In_ LPCWSTR,
+  _Out_writes_to_(*pcchPath, *pcchPath) LPWSTR,
+  _Inout_ LPDWORD pcchPath,
+  DWORD);
+
 #define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl)
 
-BOOL WINAPI PathFileExistsA(LPCSTR);
-BOOL WINAPI PathFileExistsW(LPCWSTR);
+HRESULT WINAPI PathCreateFromUrlAlloc(_In_ LPCWSTR, _Outptr_ LPWSTR*, DWORD);
+
+BOOL WINAPI PathFileExistsA(_In_ LPCSTR);
+BOOL WINAPI PathFileExistsW(_In_ LPCWSTR);
 #define PathFileExists WINELIB_NAME_AW(PathFileExists)
 
-BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR lpszPath, DWORD *dwAttr);
-BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD *dwAttr);
+BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*);
+BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*);
 #define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes)
 
-LPSTR  WINAPI PathFindExtensionA(LPCSTR);
-LPWSTR WINAPI PathFindExtensionW(LPCWSTR);
+LPSTR  WINAPI PathFindExtensionA(_In_ LPCSTR);
+LPWSTR WINAPI PathFindExtensionW(_In_ LPCWSTR);
 #define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
 
-LPSTR  WINAPI PathFindFileNameA(LPCSTR);
-LPWSTR WINAPI PathFindFileNameW(LPCWSTR);
+LPSTR  WINAPI PathFindFileNameA(_In_ LPCSTR);
+LPWSTR WINAPI PathFindFileNameW(_In_ LPCWSTR);
 #define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
 
-LPSTR  WINAPI PathFindNextComponentA(LPCSTR);
-LPWSTR WINAPI PathFindNextComponentW(LPCWSTR);
+LPSTR  WINAPI PathFindNextComponentA(_In_ LPCSTR);
+LPWSTR WINAPI PathFindNextComponentW(_In_ LPCWSTR);
 #define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
 
-BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*);
-BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*);
+BOOL WINAPI PathFindOnPathA(_Inout_updates_(MAX_PATH) LPSTR, _In_opt_ LPCSTR*);
+BOOL WINAPI PathFindOnPathW(_Inout_updates_(MAX_PATH) LPWSTR, _In_opt_ LPCWSTR*);
 #define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
 
-LPSTR  WINAPI PathGetArgsA(LPCSTR);
-LPWSTR WINAPI PathGetArgsW(LPCWSTR);
+LPSTR  WINAPI PathGetArgsA(_In_ LPCSTR);
+LPWSTR WINAPI PathGetArgsW(_In_ LPCWSTR);
 #define PathGetArgs WINELIB_NAME_AW(PathGetArgs)
 
-UINT WINAPI PathGetCharTypeA(UCHAR);
-UINT WINAPI PathGetCharTypeW(WCHAR);
+UINT WINAPI PathGetCharTypeA(_In_ UCHAR);
+UINT WINAPI PathGetCharTypeW(_In_ WCHAR);
 #define PathGetCharType WINELIB_NAME_AW(PathGetCharType)
 
-int WINAPI PathGetDriveNumberA(LPCSTR);
-int WINAPI PathGetDriveNumberW(LPCWSTR);
+int WINAPI PathGetDriveNumberA(_In_ LPCSTR);
+int WINAPI PathGetDriveNumberW(_In_ LPCWSTR);
 #define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
 
-BOOL WINAPI PathIsDirectoryA(LPCSTR);
-BOOL WINAPI PathIsDirectoryW(LPCWSTR);
+BOOL WINAPI PathIsDirectoryA(_In_ LPCSTR);
+BOOL WINAPI PathIsDirectoryW(_In_ LPCWSTR);
 #define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory)
 
-BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR);
-BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR);
+BOOL WINAPI PathIsDirectoryEmptyA(_In_ LPCSTR);
+BOOL WINAPI PathIsDirectoryEmptyW(_In_ LPCWSTR);
 #define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty)
 
-BOOL WINAPI PathIsFileSpecA(LPCSTR);
-BOOL WINAPI PathIsFileSpecW(LPCWSTR);
+BOOL WINAPI PathIsFileSpecA(_In_ LPCSTR);
+BOOL WINAPI PathIsFileSpecW(_In_ LPCWSTR);
 #define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec);
 
-BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR);
-BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR);
+BOOL WINAPI PathIsPrefixA(_In_ LPCSTR, _In_ LPCSTR);
+BOOL WINAPI PathIsPrefixW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix)
 
-BOOL WINAPI PathIsRelativeA(LPCSTR);
-BOOL WINAPI PathIsRelativeW(LPCWSTR);
+BOOL WINAPI PathIsRelativeA(_In_ LPCSTR);
+BOOL WINAPI PathIsRelativeW(_In_ LPCWSTR);
 #define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
 
-BOOL WINAPI PathIsRootA(LPCSTR);
-BOOL WINAPI PathIsRootW(LPCWSTR);
+BOOL WINAPI PathIsRootA(_In_ LPCSTR);
+BOOL WINAPI PathIsRootW(_In_ LPCWSTR);
 #define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
 
-BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR);
-BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR);
+BOOL WINAPI PathIsSameRootA(_In_ LPCSTR, _In_ LPCSTR);
+BOOL WINAPI PathIsSameRootW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot)
 
-BOOL WINAPI PathIsUNCA(LPCSTR);
-BOOL WINAPI PathIsUNCW(LPCWSTR);
+BOOL WINAPI PathIsUNCA(_In_ LPCSTR);
+BOOL WINAPI PathIsUNCW(_In_ LPCWSTR);
 #define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
 
-BOOL WINAPI PathIsUNCServerA(LPCSTR);
-BOOL WINAPI PathIsUNCServerW(LPCWSTR);
+BOOL WINAPI PathIsUNCServerA(_In_ LPCSTR);
+BOOL WINAPI PathIsUNCServerW(_In_ LPCWSTR);
 #define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer)
 
-BOOL WINAPI PathIsUNCServerShareA(LPCSTR);
-BOOL WINAPI PathIsUNCServerShareW(LPCWSTR);
+BOOL WINAPI PathIsUNCServerShareA(_In_ LPCSTR);
+BOOL WINAPI PathIsUNCServerShareW(_In_ LPCWSTR);
 #define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare)
 
-BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR);
-BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR);
+BOOL WINAPI PathIsContentTypeA(_In_ LPCSTR, _In_ LPCSTR);
+BOOL WINAPI PathIsContentTypeW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define PathIsContentType WINELIB_NAME_AW(PathIsContentType)
 
-BOOL WINAPI PathIsURLA(LPCSTR);
-BOOL WINAPI PathIsURLW(LPCWSTR);
+BOOL WINAPI PathIsURLA(_In_ LPCSTR);
+BOOL WINAPI PathIsURLW(_In_ LPCWSTR);
 #define PathIsURL WINELIB_NAME_AW(PathIsURL)
 
-BOOL WINAPI PathMakePrettyA(LPSTR);
-BOOL WINAPI PathMakePrettyW(LPWSTR);
+BOOL WINAPI PathMakePrettyA(_Inout_ LPSTR);
+BOOL WINAPI PathMakePrettyW(_Inout_ LPWSTR);
 #define PathMakePretty WINELIB_NAME_AW(PathMakePretty)
 
-BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR);
-BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR);
+BOOL WINAPI PathMatchSpecA(_In_ LPCSTR, _In_ LPCSTR);
+BOOL WINAPI PathMatchSpecW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
 
-int WINAPI PathParseIconLocationA(LPSTR);
-int WINAPI PathParseIconLocationW(LPWSTR);
+int WINAPI PathParseIconLocationA(_Inout_ LPSTR);
+int WINAPI PathParseIconLocationW(_Inout_ LPWSTR);
 #define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation)
 
-VOID WINAPI PathQuoteSpacesA(LPSTR);
-VOID WINAPI PathQuoteSpacesW(LPWSTR);
+VOID WINAPI PathQuoteSpacesA(_Inout_updates_(MAX_PATH) LPSTR);
+VOID WINAPI PathQuoteSpacesW(_Inout_updates_(MAX_PATH) LPWSTR);
 #define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
 
-BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD);
-BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD);
+BOOL
+WINAPI
+PathRelativePathToA(
+  _Out_writes_(MAX_PATH) LPSTR,
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _In_ LPCSTR,
+  _In_ DWORD);
+
+BOOL
+WINAPI
+PathRelativePathToW(
+  _Out_writes_(MAX_PATH) LPWSTR,
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _In_ LPCWSTR,
+  _In_ DWORD);
+
 #define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo)
 
-VOID WINAPI PathRemoveArgsA(LPSTR);
-VOID WINAPI PathRemoveArgsW(LPWSTR);
+VOID WINAPI PathRemoveArgsA(_Inout_ LPSTR);
+VOID WINAPI PathRemoveArgsW(_Inout_ LPWSTR);
 #define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs)
 
-LPSTR  WINAPI PathRemoveBackslashA(LPSTR);
-LPWSTR WINAPI PathRemoveBackslashW(LPWSTR);
+LPSTR  WINAPI PathRemoveBackslashA(_Inout_ LPSTR);
+LPWSTR WINAPI PathRemoveBackslashW(_Inout_ LPWSTR);
 #define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
 
-VOID WINAPI PathRemoveBlanksA(LPSTR);
-VOID WINAPI PathRemoveBlanksW(LPWSTR);
+VOID WINAPI PathRemoveBlanksA(_Inout_ LPSTR);
+VOID WINAPI PathRemoveBlanksW(_Inout_ LPWSTR);
 #define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
 
-VOID WINAPI PathRemoveExtensionA(LPSTR);
-VOID WINAPI PathRemoveExtensionW(LPWSTR);
+VOID WINAPI PathRemoveExtensionA(_Inout_ LPSTR);
+VOID WINAPI PathRemoveExtensionW(_Inout_ LPWSTR);
 #define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension)
 
-BOOL WINAPI PathRemoveFileSpecA(LPSTR);
-BOOL WINAPI PathRemoveFileSpecW(LPWSTR);
+BOOL WINAPI PathRemoveFileSpecA(_Inout_ LPSTR);
+BOOL WINAPI PathRemoveFileSpecW(_Inout_ LPWSTR);
 #define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec)
 
-BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR);
-BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR);
+BOOL
+WINAPI
+PathRenameExtensionA(
+  _Inout_updates_(MAX_PATH) LPSTR,
+  _In_ LPCSTR);
+
+BOOL
+WINAPI
+PathRenameExtensionW(
+  _Inout_updates_(MAX_PATH) LPWSTR,
+  _In_ LPCWSTR);
+
 #define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension)
 
-BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT);
-BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT);
+BOOL
+WINAPI
+PathSearchAndQualifyA(
+  _In_ LPCSTR,
+  _Out_writes_(cchBuf) LPSTR,
+  _In_ UINT cchBuf);
+
+BOOL
+WINAPI
+PathSearchAndQualifyW(
+  _In_ LPCWSTR,
+  _Out_writes_(cchBuf) LPWSTR,
+  _In_ UINT cchBuf);
+
 #define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify)
 
-VOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR);
-VOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR);
+VOID WINAPI PathSetDlgItemPathA(_In_ HWND, int, LPCSTR);
+VOID WINAPI PathSetDlgItemPathW(_In_ HWND, int, LPCWSTR);
 #define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath)
 
-LPSTR  WINAPI PathSkipRootA(LPCSTR);
-LPWSTR WINAPI PathSkipRootW(LPCWSTR);
+LPSTR  WINAPI PathSkipRootA(_In_ LPCSTR);
+LPWSTR WINAPI PathSkipRootW(_In_ LPCWSTR);
 #define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot)
 
-VOID WINAPI PathStripPathA(LPSTR);
-VOID WINAPI PathStripPathW(LPWSTR);
+VOID WINAPI PathStripPathA(_Inout_ LPSTR);
+VOID WINAPI PathStripPathW(_Inout_ LPWSTR);
 #define PathStripPath WINELIB_NAME_AW(PathStripPath)
 
-BOOL WINAPI PathStripToRootA(LPSTR);
-BOOL WINAPI PathStripToRootW(LPWSTR);
+BOOL WINAPI PathStripToRootA(_Inout_ LPSTR);
+BOOL WINAPI PathStripToRootW(_Inout_ LPWSTR);
 #define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)
 
-VOID WINAPI PathUnquoteSpacesA(LPSTR);
-VOID WINAPI PathUnquoteSpacesW(LPWSTR);
+VOID WINAPI PathUnquoteSpacesA(_Inout_ LPSTR);
+VOID WINAPI PathUnquoteSpacesW(_Inout_ LPWSTR);
 #define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces)
 
-BOOL WINAPI PathMakeSystemFolderA(LPCSTR);
-BOOL WINAPI PathMakeSystemFolderW(LPCWSTR);
+BOOL WINAPI PathMakeSystemFolderA(_In_ LPCSTR);
+BOOL WINAPI PathMakeSystemFolderW(_In_ LPCWSTR);
 #define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder)
 
-BOOL WINAPI PathUnmakeSystemFolderA(LPCSTR);
-BOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR);
+BOOL WINAPI PathUnmakeSystemFolderA(_In_ LPCSTR);
+BOOL WINAPI PathUnmakeSystemFolderW(_In_ LPCWSTR);
 #define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder)
 
-BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD);
-BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD);
+BOOL WINAPI PathIsSystemFolderA(_In_opt_ LPCSTR, _In_ DWORD);
+BOOL WINAPI PathIsSystemFolderW(_In_opt_ LPCWSTR, _In_ DWORD);
 #define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder)
 
-BOOL WINAPI PathIsNetworkPathA(LPCSTR);
-BOOL WINAPI PathIsNetworkPathW(LPCWSTR);
+BOOL WINAPI PathIsNetworkPathA(_In_ LPCSTR);
+BOOL WINAPI PathIsNetworkPathW(_In_ LPCWSTR);
 #define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath)
 
-BOOL WINAPI PathIsLFNFileSpecA(LPCSTR);
-BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR);
+BOOL WINAPI PathIsLFNFileSpecA(_In_ LPCSTR);
+BOOL WINAPI PathIsLFNFileSpecW(_In_ LPCWSTR);
 #define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec)
 
-LPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int);
-LPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int);
+LPCSTR
+WINAPI
+PathFindSuffixArrayA(
+  _In_ LPCSTR,
+  _In_reads_(iArraySize) LPCSTR *,
+  int iArraySize);
+
+LPCWSTR
+WINAPI
+PathFindSuffixArrayW(
+  _In_ LPCWSTR,
+  _In_reads_(iArraySize) LPCWSTR *,
+  int iArraySize);
+
 #define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray)
 
-VOID WINAPI PathUndecorateA(LPSTR);
-VOID WINAPI PathUndecorateW(LPWSTR);
+VOID WINAPI PathUndecorateA(_Inout_ LPSTR);
+VOID WINAPI PathUndecorateW(_Inout_ LPWSTR);
 #define PathUndecorate WINELIB_NAME_AW(PathUndecorate)
 
-BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT);
-BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT);
+BOOL
+WINAPI
+PathUnExpandEnvStringsA(
+  _In_ LPCSTR,
+  _Out_writes_(cchBuf) LPSTR,
+  _In_ UINT cchBuf);
+
+BOOL
+WINAPI
+PathUnExpandEnvStringsW(
+  _In_ LPCWSTR,
+  _Out_writes_(cchBuf) LPWSTR,
+  _In_ UINT cchBuf);
+
 #define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings)
 
 /* Url functions */
@@ -644,24 +1224,82 @@ typedef enum {
 #define URL_ESCAPE_SEGMENT_ONLY      0x00002000
 #define URL_ESCAPE_PERCENT           0x00001000
 
-HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD);
-HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+HRESULT
+WINAPI
+UrlApplySchemeA(
+  _In_ LPCSTR,
+  _Out_writes_(*pcchOut) LPSTR,
+  _Inout_ LPDWORD pcchOut,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlApplySchemeW(
+  _In_ LPCWSTR,
+  _Out_writes_(*pcchOut) LPWSTR,
+  _Inout_ LPDWORD pcchOut,
+  DWORD);
+
 #define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme)
 
-HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD);
-HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+HRESULT
+WINAPI
+UrlCanonicalizeA(
+  _In_ LPCSTR,
+  _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPSTR,
+  _Inout_ LPDWORD pcchCanonicalized,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlCanonicalizeW(
+  _In_ LPCWSTR,
+  _Out_writes_to_(*pcchCanonicalized, *pcchCanonicalized) LPWSTR,
+  _Inout_ LPDWORD pcchCanonicalized,
+  DWORD);
+
 #define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize)
 
-HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD);
-HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD);
+HRESULT
+WINAPI
+UrlCombineA(
+  _In_ LPCSTR,
+  _In_ LPCSTR,
+  _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPSTR,
+  _Inout_ LPDWORD pcchCombined,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlCombineW(
+  _In_ LPCWSTR,
+  _In_ LPCWSTR,
+  _Out_writes_to_opt_(*pcchCombined, *pcchCombined) LPWSTR,
+  _Inout_ LPDWORD pcchCombined,
+  DWORD);
+
 #define UrlCombine WINELIB_NAME_AW(UrlCombine)
 
-INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL);
-INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL);
+INT WINAPI UrlCompareA(_In_ LPCSTR, _In_ LPCSTR, BOOL);
+INT WINAPI UrlCompareW(_In_ LPCWSTR, _In_ LPCWSTR, BOOL);
 #define UrlCompare WINELIB_NAME_AW(UrlCompare)
 
-HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD);
-HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+HRESULT
+WINAPI
+UrlEscapeA(
+  _In_ LPCSTR,
+  _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPSTR,
+  _Inout_ LPDWORD pcchEscaped,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlEscapeW(
+  _In_ LPCWSTR,
+  _Out_writes_to_(*pcchEscaped, *pcchEscaped) LPWSTR,
+  _Inout_ LPDWORD pcchEscaped,
+  DWORD);
+
 #define UrlEscape WINELIB_NAME_AW(UrlEscape)
 
 #define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \
@@ -670,38 +1308,86 @@ HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
                          URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
 #define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces)
 
-LPCSTR  WINAPI UrlGetLocationA(LPCSTR);
-LPCWSTR WINAPI UrlGetLocationW(LPCWSTR);
+LPCSTR  WINAPI UrlGetLocationA(_In_ LPCSTR);
+LPCWSTR WINAPI UrlGetLocationW(_In_ LPCWSTR);
 #define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation)
 
-HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD);
-HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD);
+HRESULT
+WINAPI
+UrlGetPartA(
+  _In_ LPCSTR,
+  _Out_writes_(*pcchOut) LPSTR,
+  _Inout_ LPDWORD pcchOut,
+  DWORD,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlGetPartW(
+  _In_ LPCWSTR,
+  _Out_writes_(*pcchOut) LPWSTR,
+  _Inout_ LPDWORD pcchOut,
+  DWORD,
+  DWORD);
+
 #define UrlGetPart WINELIB_NAME_AW(UrlGetPart)
 
-HRESULT WINAPI HashData(const unsigned char *,DWORD,unsigned char *lpDest,DWORD);
+HRESULT
+WINAPI
+HashData(
+  _In_reads_bytes_(cbData) const unsigned char *,
+  DWORD cbData,
+  _Out_writes_bytes_(cbHash) unsigned char *lpDest,
+  DWORD cbHash);
+
+HRESULT
+WINAPI
+UrlHashA(
+  _In_ LPCSTR,
+  _Out_writes_bytes_(cbHash) unsigned char *,
+  DWORD cbHash);
+
+HRESULT
+WINAPI
+UrlHashW(
+  _In_ LPCWSTR,
+  _Out_writes_bytes_(cbHash) unsigned char *,
+  DWORD cbHash);
 
-HRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,DWORD);
-HRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,DWORD);
 #define UrlHash WINELIB_NAME_AW(UrlHash)
 
-BOOL    WINAPI UrlIsA(LPCSTR,URLIS);
-BOOL    WINAPI UrlIsW(LPCWSTR,URLIS);
+BOOL    WINAPI UrlIsA(_In_ LPCSTR, URLIS);
+BOOL    WINAPI UrlIsW(_In_ LPCWSTR, URLIS);
 #define UrlIs WINELIB_NAME_AW(UrlIs)
 
-BOOL    WINAPI UrlIsNoHistoryA(LPCSTR);
-BOOL    WINAPI UrlIsNoHistoryW(LPCWSTR);
+BOOL    WINAPI UrlIsNoHistoryA(_In_ LPCSTR);
+BOOL    WINAPI UrlIsNoHistoryW(_In_ LPCWSTR);
 #define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory)
 
-BOOL    WINAPI UrlIsOpaqueA(LPCSTR);
-BOOL    WINAPI UrlIsOpaqueW(LPCWSTR);
+BOOL    WINAPI UrlIsOpaqueA(_In_ LPCSTR);
+BOOL    WINAPI UrlIsOpaqueW(_In_ LPCWSTR);
 #define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque)
 
 #define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL)
-#define UrlIsFileUrlW(y) UrlIsW(x, URLIS_FILEURL)
+#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL)
 #define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl)
 
-HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD);
-HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);
+HRESULT
+WINAPI
+UrlUnescapeA(
+  _Inout_ LPSTR,
+  _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPSTR,
+  _Inout_opt_ LPDWORD pcchUnescaped,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlUnescapeW(
+  _Inout_ LPWSTR,
+  _Out_writes_to_opt_(*pcchUnescaped, *pcchUnescaped) LPWSTR,
+  _Inout_opt_ LPDWORD pcchUnescaped,
+  DWORD);
+
 #define UrlUnescape WINELIB_NAME_AW(UrlUnescape)
 
 #define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \
@@ -710,8 +1396,22 @@ HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);
                                               y | URL_UNESCAPE_INPLACE)
 #define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace)
 
-HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);
-HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+HRESULT
+WINAPI
+UrlCreateFromPathA(
+  _In_ LPCSTR,
+  _Out_writes_to_(*pcchUrl, *pcchUrl) LPSTR,
+  _Inout_ LPDWORD pcchUrl,
+  DWORD);
+
+HRESULT
+WINAPI
+UrlCreateFromPathW(
+  _In_ LPCWSTR,
+  _Out_writes_to_(*pcchUrl, *pcchUrl) LPWSTR,
+  _Inout_ LPDWORD pcchUrl,
+  DWORD);
+
 #define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath)
 
 typedef struct tagPARSEDURLA {
@@ -732,8 +1432,8 @@ typedef struct tagPARSEDURLW {
     UINT nScheme;
 } PARSEDURLW, *PPARSEDURLW;
 
-HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu);
-HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu);
+HRESULT WINAPI ParseURLA(_In_ LPCSTR pszUrl, _Inout_ PARSEDURLA *ppu);
+HRESULT WINAPI ParseURLW(_In_ LPCWSTR pszUrl, _Inout_ PARSEDURLW *ppu);
 #define ParseURL WINELIB_NAME_AW(ParseUrl)
 
 #endif /* NO_SHLWAPI_PATH */
@@ -750,74 +1450,110 @@ BOOL WINAPI ChrCmpIA (WORD,WORD);
 BOOL WINAPI ChrCmpIW (WCHAR,WCHAR);
 #define ChrCmpI WINELIB_NAME_AW(ChrCmpI)
 
-INT WINAPI StrCSpnA(LPCSTR,LPCSTR);
-INT WINAPI StrCSpnW(LPCWSTR,LPCWSTR);
+INT WINAPI StrCSpnA(_In_ LPCSTR, _In_ LPCSTR);
+INT WINAPI StrCSpnW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrCSpn WINELIB_NAME_AW(StrCSpn)
 
-INT WINAPI StrCSpnIA(LPCSTR,LPCSTR);
-INT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR);
+INT WINAPI StrCSpnIA(_In_ LPCSTR, _In_ LPCSTR);
+INT WINAPI StrCSpnIW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrCSpnI WINELIB_NAME_AW(StrCSpnI)
 
 #define StrCatA lstrcatA
-LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR);
+LPWSTR WINAPI StrCatW(_Inout_ LPWSTR, _In_ LPCWSTR);
 #define StrCat WINELIB_NAME_AW(StrCat)
 
-LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT);
-LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT);
+LPSTR
+WINAPI
+StrCatBuffA(
+  _Inout_updates_(cchDestBuffSize) LPSTR,
+  _In_ LPCSTR,
+  INT cchDestBuffSize);
+
+LPWSTR
+WINAPI
+StrCatBuffW(
+  _Inout_updates_(cchDestBuffSize) LPWSTR,
+  _In_ LPCWSTR,
+  INT cchDestBuffSize);
+
 #define StrCatBuff WINELIB_NAME_AW(StrCatBuff)
 
-DWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR);
+DWORD
+WINAPI
+StrCatChainW(
+  _Out_writes_(cchDst) LPWSTR,
+  DWORD cchDst,
+  DWORD,
+  _In_ LPCWSTR);
 
-LPSTR WINAPI StrChrA(LPCSTR,WORD);
-LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR);
+LPSTR WINAPI StrChrA(_In_ LPCSTR, WORD);
+LPWSTR WINAPI StrChrW(_In_ LPCWSTR, WCHAR);
 #define StrChr WINELIB_NAME_AW(StrChr)
 
-LPSTR WINAPI StrChrIA(LPCSTR,WORD);
-LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR);
+LPSTR WINAPI StrChrIA(_In_ LPCSTR, WORD);
+LPWSTR WINAPI StrChrIW(_In_ LPCWSTR, WCHAR);
 #define StrChrI WINELIB_NAME_AW(StrChrI)
 
 #define StrCmpA lstrcmpA
-int WINAPI StrCmpW(LPCWSTR,LPCWSTR);
+int WINAPI StrCmpW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrCmp WINELIB_NAME_AW(StrCmp)
 
 #define StrCmpIA lstrcmpiA
-int WINAPI StrCmpIW(LPCWSTR,LPCWSTR);
+int WINAPI StrCmpIW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrCmpI WINELIB_NAME_AW(StrCmpI)
 
 #define StrCpyA lstrcpyA
-LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR);
+LPWSTR WINAPI StrCpyW(_Out_ LPWSTR, _In_ LPCWSTR);
 #define StrCpy WINELIB_NAME_AW(StrCpy)
 
 #define StrCpyNA lstrcpynA
-LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int);
+LPWSTR WINAPI StrCpyNW(_Out_writes_(cchMax) LPWSTR, _In_ LPCWSTR, int cchMax);
 #define StrCpyN WINELIB_NAME_AW(StrCpyN)
 #define StrNCpy WINELIB_NAME_AW(StrCpyN)
 
-INT WINAPI StrCmpLogicalW(LPCWSTR,LPCWSTR);
+INT WINAPI StrCmpLogicalW(_In_ LPCWSTR, _In_ LPCWSTR);
 
-INT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT);
-INT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT);
+INT WINAPI StrCmpNA(_In_ LPCSTR, _In_ LPCSTR, INT);
+INT WINAPI StrCmpNW(_In_ LPCWSTR, _In_ LPCWSTR, INT);
 #define StrCmpN WINELIB_NAME_AW(StrCmpN)
 #define StrNCmp WINELIB_NAME_AW(StrCmpN)
 
-INT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT);
-INT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT);
+INT WINAPI StrCmpNIA(_In_ LPCSTR, _In_ LPCSTR, INT);
+INT WINAPI StrCmpNIW(_In_ LPCWSTR, _In_ LPCWSTR, INT);
 #define StrCmpNI WINELIB_NAME_AW(StrCmpNI)
 #define StrNCmpI WINELIB_NAME_AW(StrCmpNI)
 
-LPSTR WINAPI StrDupA(LPCSTR);
-LPWSTR WINAPI StrDupW(LPCWSTR);
+LPSTR WINAPI StrDupA(_In_ LPCSTR);
+LPWSTR WINAPI StrDupW(_In_ LPCWSTR);
 #define StrDup WINELIB_NAME_AW(StrDup)
 
-HRESULT WINAPI SHStrDupA(LPCSTR,WCHAR**);
-HRESULT WINAPI SHStrDupW(LPCWSTR,WCHAR**);
+HRESULT WINAPI SHStrDupA(_In_ LPCSTR, _Outptr_ WCHAR**);
+HRESULT WINAPI SHStrDupW(_In_ LPCWSTR, _Outptr_ WCHAR**);
 #define SHStrDup WINELIB_NAME_AW(SHStrDup)
 
-LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT);
+LPSTR
+WINAPI
+StrFormatByteSizeA(
+  DWORD,
+  _Out_writes_(cchBuf) LPSTR,
+  UINT cchBuf);
 
 /* A/W Pairing is broken for this function */
-LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT);
-LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT);
+
+LPSTR
+WINAPI
+StrFormatByteSize64A(
+  LONGLONG,
+  _Out_writes_(cchBuf) LPSTR,
+  UINT cchBuf);
+
+LPWSTR
+WINAPI
+StrFormatByteSizeW(
+  LONGLONG,
+  _Out_writes_(cchBuf) LPWSTR,
+  UINT cchBuf);
+
 #ifndef WINE_NO_UNICODE_MACROS
 #ifdef UNICODE
 #define StrFormatByteSize StrFormatByteSizeW
@@ -826,16 +1562,42 @@ LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT);
 #endif
 #endif
 
-LPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT);
-LPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT);
+LPSTR
+WINAPI
+StrFormatKBSizeA(
+  LONGLONG,
+  _Out_writes_(cchBuf) LPSTR,
+  UINT cchBuf);
+
+LPWSTR
+WINAPI
+StrFormatKBSizeW(
+  LONGLONG,
+  _Out_writes_(cchBuf) LPWSTR,
+  UINT cchBuf);
+
 #define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize)
 
-int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int);
-int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int);
+int
+WINAPI
+StrFromTimeIntervalA(
+  _Out_writes_(cchMax) LPSTR,
+  UINT cchMax,
+  DWORD,
+  int);
+
+int
+WINAPI
+StrFromTimeIntervalW(
+  _Out_writes_(cchMax) LPWSTR,
+  UINT cchMax,
+  DWORD,
+  int);
+
 #define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval)
 
-BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int);
-BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);
+BOOL WINAPI StrIsIntlEqualA(BOOL, _In_ LPCSTR, _In_ LPCSTR, int);
+BOOL WINAPI StrIsIntlEqualW(BOOL, _In_ LPCWSTR, _In_ LPCWSTR, int);
 #define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual)
 
 #define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c)
@@ -844,68 +1606,119 @@ BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);
 #define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c)
 #define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c)
 
-LPSTR  WINAPI StrNCatA(LPSTR,LPCSTR,int);
-LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int);
+LPSTR  WINAPI StrNCatA(_Inout_updates_(cchMax) LPSTR, LPCSTR, int cchMax);
+LPWSTR WINAPI StrNCatW(_Inout_updates_(cchMax) LPWSTR, LPCWSTR, int cchMax);
 #define StrNCat WINELIB_NAME_AW(StrNCat)
 #define StrCatN WINELIB_NAME_AW(StrNCat)
 
-LPSTR  WINAPI StrPBrkA(LPCSTR,LPCSTR);
-LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR);
+LPSTR  WINAPI StrPBrkA(_In_ LPCSTR, _In_ LPCSTR);
+LPWSTR WINAPI StrPBrkW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrPBrk WINELIB_NAME_AW(StrPBrk)
 
-LPSTR  WINAPI StrRChrA(LPCSTR,LPCSTR,WORD);
-LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD);
+LPSTR  WINAPI StrRChrA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD);
+LPWSTR WINAPI StrRChrW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR);
 #define StrRChr WINELIB_NAME_AW(StrRChr)
 
-LPSTR  WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD);
-LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD);
+LPSTR  WINAPI StrRChrIA(_In_ LPCSTR, _In_opt_ LPCSTR, WORD);
+LPWSTR WINAPI StrRChrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, WCHAR);
 #define StrRChrI WINELIB_NAME_AW(StrRChrI)
 
-LPSTR  WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR);
-LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR);
+LPSTR  WINAPI StrRStrIA(_In_ LPCSTR, _In_opt_ LPCSTR, _In_ LPCSTR);
+LPWSTR WINAPI StrRStrIW(_In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ LPCWSTR);
 #define StrRStrI WINELIB_NAME_AW(StrRStrI)
 
-int WINAPI StrSpnA(LPCSTR,LPCSTR);
-int WINAPI StrSpnW(LPCWSTR,LPCWSTR);
+int WINAPI StrSpnA(_In_ LPCSTR, _In_ LPCSTR);
+int WINAPI StrSpnW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrSpn WINELIB_NAME_AW(StrSpn)
 
-LPSTR  WINAPI StrStrA(LPCSTR,LPCSTR);
-LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR);
+LPSTR  WINAPI StrStrA(_In_ LPCSTR, _In_ LPCSTR);
+LPWSTR WINAPI StrStrW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrStr WINELIB_NAME_AW(StrStr)
 
-LPSTR  WINAPI StrStrIA(LPCSTR,LPCSTR);
-LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR);
+LPSTR  WINAPI StrStrIA(_In_ LPCSTR, _In_ LPCSTR);
+LPWSTR WINAPI StrStrIW(_In_ LPCWSTR, _In_ LPCWSTR);
 #define StrStrI WINELIB_NAME_AW(StrStrI)
 
-int WINAPI StrToIntA(LPCSTR);
-int WINAPI StrToIntW(LPCWSTR);
+LPWSTR WINAPI StrStrNW(_In_ LPCWSTR, _In_ LPCWSTR, UINT);
+LPWSTR WINAPI StrStrNIW(_In_ LPCWSTR, _In_ LPCWSTR, UINT);
+
+int WINAPI StrToIntA(_In_ LPCSTR);
+int WINAPI StrToIntW(_In_ LPCWSTR);
 #define StrToInt WINELIB_NAME_AW(StrToInt)
 #define StrToLong WINELIB_NAME_AW(StrToInt)
 
-BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*);
-BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*);
+BOOL WINAPI StrToIntExA(_In_ LPCSTR, DWORD, _Out_ int*);
+BOOL WINAPI StrToIntExW(_In_ LPCWSTR, DWORD, _Out_ int*);
 #define StrToIntEx WINELIB_NAME_AW(StrToIntEx)
 
-BOOL WINAPI StrToInt64ExA(LPCSTR,DWORD,LONGLONG*);
-BOOL WINAPI StrToInt64ExW(LPCWSTR,DWORD,LONGLONG*);
+BOOL WINAPI StrToInt64ExA(_In_ LPCSTR, DWORD, _Out_ LONGLONG*);
+BOOL WINAPI StrToInt64ExW(_In_ LPCWSTR, DWORD, _Out_ LONGLONG*);
 #define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64)
 
-BOOL WINAPI StrTrimA(LPSTR,LPCSTR);
-BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);
+BOOL WINAPI StrTrimA(_Inout_ LPSTR, _In_ LPCSTR);
+BOOL WINAPI StrTrimW(_Inout_ LPWSTR, _In_ LPCWSTR);
 #define StrTrim WINELIB_NAME_AW(StrTrim)
 
-INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list);
-INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list);
+INT
+WINAPI
+wvnsprintfA(
+  _Out_writes_(cchDest) LPSTR,
+  _In_ INT cchDest,
+  _In_ _Printf_format_string_ LPCSTR,
+  _In_ __ms_va_list);
+
+INT
+WINAPI
+wvnsprintfW(
+  _Out_writes_(cchDest) LPWSTR,
+  _In_ INT cchDest,
+  _In_ _Printf_format_string_ LPCWSTR,
+  _In_ __ms_va_list);
+
 #define wvnsprintf WINELIB_NAME_AW(wvnsprintf)
 
-INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...);
-INT WINAPIV wnsprintfW(LPWSTR,INT,LPCWSTR, ...);
+INT
+WINAPIV
+wnsprintfA(
+  _Out_writes_(cchDest) LPSTR,
+  _In_ INT cchDest,
+  _In_ _Printf_format_string_ LPCSTR,
+  ...);
+
+INT
+WINAPIV
+wnsprintfW(
+  _Out_writes_(cchDest) LPWSTR,
+  _In_ INT cchDest,
+  _In_ _Printf_format_string_ LPCWSTR,
+  ...);
+
 #define wnsprintf WINELIB_NAME_AW(wnsprintf)
 
-HRESULT WINAPI SHLoadIndirectString(LPCWSTR,LPWSTR,UINT,PVOID*);
+HRESULT
+WINAPI
+SHLoadIndirectString(
+  _In_ LPCWSTR,
+  _Out_writes_(cchOutBuf) LPWSTR,
+  _In_ UINT cchOutBuf,
+  _Reserved_ PVOID*);
+
+BOOL
+WINAPI
+IntlStrEqWorkerA(
+  BOOL,
+  _In_reads_(nChar) LPCSTR,
+  _In_reads_(nChar) LPCSTR,
+  int nChar);
+
+BOOL
+WINAPI
+IntlStrEqWorkerW(
+  BOOL,
+  _In_reads_(nChar) LPCWSTR,
+  _In_reads_(nChar) LPCWSTR,
+  int nChar);
 
-BOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int);
-BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int);
 #define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker)
 
 #define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n)
@@ -916,15 +1729,50 @@ BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int);
 #define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n)
 #define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI)
 
-HRESULT WINAPI StrRetToStrA(STRRET*,LPCITEMIDLIST,LPSTR*);
-HRESULT WINAPI StrRetToStrW(STRRET*,LPCITEMIDLIST,LPWSTR*);
+HRESULT
+WINAPI
+StrRetToStrA(
+  _Inout_ STRRET*,
+  _In_opt_ LPCITEMIDLIST,
+  _Outptr_ LPSTR*);
+
+HRESULT
+WINAPI
+StrRetToStrW(
+  _Inout_ STRRET*,
+  _In_opt_ LPCITEMIDLIST,
+  _Outptr_ LPWSTR*);
+
 #define StrRetToStr WINELIB_NAME_AW(StrRetToStr)
 
-HRESULT WINAPI StrRetToBufA(STRRET*,LPCITEMIDLIST,LPSTR,UINT);
-HRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT);
+HRESULT
+WINAPI
+StrRetToBufA(
+  _Inout_ STRRET*,
+  _In_opt_ LPCITEMIDLIST,
+  _Out_writes_(cchBuf) LPSTR,
+  UINT cchBuf);
+
+HRESULT
+WINAPI
+StrRetToBufW(
+  _Inout_ STRRET*,
+  _In_opt_ LPCITEMIDLIST,
+  _Out_writes_(cchBuf) LPWSTR,
+  UINT cchBuf);
+
 #define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf)
 
-HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*);
+HRESULT
+WINAPI
+StrRetToBSTR(
+  _Inout_ STRRET*,
+  _In_opt_ LPCITEMIDLIST,
+  _Outptr_ BSTR*);
+
+BOOL WINAPI IsCharSpaceA(CHAR);
+BOOL WINAPI IsCharSpaceW(WCHAR);
+#define IsCharSpace WINELIB_NAME_AW(IsCharSpace)
 
 #endif /* NO_SHLWAPI_STRFCNS */
 
@@ -932,33 +1780,83 @@ HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*);
 /* GDI functions */
 #ifndef NO_SHLWAPI_GDI
 
-HPALETTE WINAPI SHCreateShellPalette(HDC);
+HPALETTE WINAPI SHCreateShellPalette(_In_opt_ HDC);
 
 COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD);
 
 COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL);
 
-VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD);
+VOID WINAPI ColorRGBToHLS(COLORREF, _Out_ LPWORD, _Out_ LPWORD, _Out_ LPWORD);
 
 #endif /* NO_SHLWAPI_GDI */
 
+/* Security functions */
+BOOL WINAPI IsInternetESCEnabled(void);
 
 /* Stream functions */
 #ifndef NO_SHLWAPI_STREAM
 
-struct IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD);
-struct IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD);
+struct IStream *
+WINAPI
+SHOpenRegStreamA(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ DWORD);
+
+struct IStream *
+WINAPI
+SHOpenRegStreamW(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ DWORD);
+
 #define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */
 
-struct IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD);
-struct IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD);
+struct IStream *
+WINAPI
+SHOpenRegStream2A(
+  _In_ HKEY,
+  _In_opt_ LPCSTR,
+  _In_opt_ LPCSTR,
+  _In_ DWORD);
+
+struct IStream *
+WINAPI
+SHOpenRegStream2W(
+  _In_ HKEY,
+  _In_opt_ LPCWSTR,
+  _In_opt_ LPCWSTR,
+  _In_ DWORD);
+
 #define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2)
 
-HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**);
-HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**);
+HRESULT
+WINAPI
+SHCreateStreamOnFileA(
+  _In_ LPCSTR,
+  _In_ DWORD,
+  _Outptr_ struct IStream**);
+
+HRESULT
+WINAPI
+SHCreateStreamOnFileW(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _Outptr_ struct IStream**);
+
 #define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile)
 
-HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**);
+HRESULT
+WINAPI
+SHCreateStreamOnFileEx(
+  _In_ LPCWSTR,
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_ BOOL,
+  _In_opt_ struct IStream*,
+  _Outptr_ struct IStream**);
 
 HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**);
 
@@ -978,11 +1876,12 @@ HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**);
 #define SHACF_AUTOAPPEND_FORCE_ON   0x40000000
 #define SHACF_AUTOAPPEND_FORCE_OFF  0x80000000
 
-HRESULT WINAPI SHAutoComplete(HWND,DWORD);
+HRESULT WINAPI SHAutoComplete(_In_ HWND, DWORD);
 
 /* Threads */
-HRESULT WINAPI SHGetThreadRef(IUnknown**);
-HRESULT WINAPI SHSetThreadRef(IUnknown*);
+HRESULT WINAPI SHCreateThreadRef(_Inout_ LONG*, _Outptr_ IUnknown**);
+HRESULT WINAPI SHGetThreadRef(_Outptr_ IUnknown**);
+HRESULT WINAPI SHSetThreadRef(_In_opt_ IUnknown*);
 HRESULT WINAPI SHReleaseThreadRef(void);
 
 /* SHCreateThread flags */
@@ -994,9 +1893,15 @@ HRESULT WINAPI SHReleaseThreadRef(void);
 #define CTF_REF_COUNTED     0x20 /* Thread is ref counted */
 #define CTF_WAIT_ALLOWCOM   0x40 /* Allow marshalling */
 
-BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE);
+BOOL
+WINAPI
+SHCreateThread(
+  _In_ LPTHREAD_START_ROUTINE,
+  _In_opt_ void*,
+  _In_ DWORD,
+  _In_opt_ LPTHREAD_START_ROUTINE);
 
-BOOL WINAPI SHSkipJunction(struct IBindCtx*,const CLSID*);
+BOOL WINAPI SHSkipJunction(_In_opt_ struct IBindCtx*, _In_ const CLSID*);
 
 /* Version Information */
 
@@ -1032,7 +1937,7 @@ typedef struct _DLLVERSIONINFO2 {
 #define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \
   ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe))
 
-HRESULT WINAPI DllInstall(BOOL,LPCWSTR) DECLSPEC_HIDDEN;
+HRESULT WINAPI DllInstall(BOOL, _In_opt_ LPCWSTR) DECLSPEC_HIDDEN;
 
 
 #if (_WIN32_IE >= 0x0600)
@@ -1049,7 +1954,15 @@ HRESULT WINAPI DllInstall(BOOL,LPCWSTR) DECLSPEC_HIDDEN;
 #define SHGVSPB_USERDEFAULTS     (SHGVSPB_PERUSER | SHGVSPB_ALLFOLDERS)
 #define SHGVSPB_GLOBALDEAFAULTS  (SHGVSPB_ALLUSERS | SHGVSPB_ALLFOLDERS)
 
-HRESULT WINAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl, LPWSTR bag_name, DWORD flags, REFIID riid, void **ppv);
+HRESULT
+WINAPI
+SHGetViewStatePropertyBag(
+  _In_opt_ LPCITEMIDLIST pidl,
+  _In_opt_ LPWSTR bag_name,
+  DWORD flags,
+  _In_ REFIID riid,
+  _Outptr_ void **ppv);
+
 #endif  /* (_WIN32_IE >= 0x0600) */
 
 
@@ -1117,7 +2030,13 @@ typedef struct
     int        dwOffset;
 } QITAB, *LPQITAB;
 
-HRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv);
+HRESULT
+WINAPI
+QISearch(
+  _Inout_ void* base,
+  _In_ const QITAB *pqit,
+  _In_ REFIID riid,
+  _Outptr_ void **ppv);
 
 #include <poppack.h> 
 
index 50eef6b..a37237d 100644 (file)
@@ -52,7 +52,6 @@ HRESULT WINAPI IUnknown_Exec(IUnknown* lpUnknown, REFGUID pguidCmdGroup, DWORD n
 LONG WINAPI SHSetWindowBits(HWND hwnd, INT offset, UINT wMask, UINT wFlags);
 HWND WINAPI SHSetParentHwnd(HWND hWnd, HWND hWndParent);
 HRESULT WINAPI ConnectToConnectionPoint(IUnknown *lpUnkSink, REFIID riid, BOOL bAdviseOnly, IUnknown *lpUnknown, LPDWORD lpCookie, IConnectionPoint **lppCP);
-DWORD WINAPI IUnknown_AtomicRelease(IUnknown **lpUnknown);
 BOOL WINAPI SHIsSameObject(IUnknown *lpInt1, IUnknown *lpInt2);
 HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd);
 HRESULT WINAPI IUnknown_SetOwner(IUnknown *pUnk, ULONG arg);
index 6552854..78b8c05 100644 (file)
@@ -340,18 +340,55 @@ DWORD WINAPI GetConsoleAliasExesLengthA(VOID);
 DWORD WINAPI GetConsoleAliasExesLengthW(VOID);
 #endif
 
-HANDLE WINAPI CreateConsoleScreenBuffer(_In_ DWORD, _In_ DWORD, _In_opt_ CONST SECURITY_ATTRIBUTES*, _In_ DWORD, _Reserved_ LPVOID);
-BOOL WINAPI FillConsoleOutputAttribute(_In_ HANDLE, _In_ WORD, _In_ DWORD, _In_ COORD, _Out_ PDWORD);
-BOOL WINAPI FillConsoleOutputCharacterA(_In_ HANDLE, _In_ CHAR, _In_ DWORD, _In_ COORD, _Out_ PDWORD);
-BOOL WINAPI FillConsoleOutputCharacterW(_In_ HANDLE, _In_ WCHAR, _In_ DWORD, _In_ COORD, _Out_ PDWORD);
+HANDLE
+WINAPI
+CreateConsoleScreenBuffer(
+  _In_ DWORD,
+  _In_ DWORD,
+  _In_opt_ CONST SECURITY_ATTRIBUTES*,
+  _In_ DWORD,
+  _Reserved_ LPVOID);
+
+BOOL
+WINAPI
+FillConsoleOutputAttribute(
+  _In_ HANDLE,
+  _In_ WORD,
+  _In_ DWORD,
+  _In_ COORD,
+  _Out_ PDWORD);
+
+BOOL
+WINAPI
+FillConsoleOutputCharacterA(
+  _In_ HANDLE,
+  _In_ CHAR,
+  _In_ DWORD,
+  _In_ COORD,
+  _Out_ PDWORD);
+
+BOOL
+WINAPI
+FillConsoleOutputCharacterW(
+  _In_ HANDLE,
+  _In_ WCHAR,
+  _In_ DWORD,
+  _In_ COORD,
+  _Out_ PDWORD);
+
 BOOL WINAPI FlushConsoleInputBuffer(_In_ HANDLE);
 BOOL WINAPI FreeConsole(VOID);
 BOOL WINAPI GenerateConsoleCtrlEvent(_In_ DWORD, _In_ DWORD);
 UINT WINAPI GetConsoleCP(VOID);
 BOOL WINAPI GetConsoleCursorInfo(_In_ HANDLE, _Out_ PCONSOLE_CURSOR_INFO);
-BOOL WINAPI GetConsoleMode(HANDLE,PDWORD);
+BOOL WINAPI GetConsoleMode(_In_ HANDLE, _Out_ PDWORD);
 UINT WINAPI GetConsoleOutputCP(VOID);
-BOOL WINAPI GetConsoleScreenBufferInfo(_In_ HANDLE, _Out_ PCONSOLE_SCREEN_BUFFER_INFO);
+
+BOOL
+WINAPI
+GetConsoleScreenBufferInfo(
+  _In_ HANDLE,
+  _Out_ PCONSOLE_SCREEN_BUFFER_INFO);
 
 /* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
 BOOL WINAPI InvalidateConsoleDIBits(_In_ HANDLE, _In_ PSMALL_RECT);
@@ -382,15 +419,29 @@ GetCurrentConsoleFont(
   _Out_ PCONSOLE_FONT_INFO lpConsoleCurrentFont);
 
 #if (_WIN32_WINNT >= 0x0500)
+
 HWND WINAPI GetConsoleWindow(VOID);
 BOOL APIENTRY GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags);
-BOOL APIENTRY SetConsoleDisplayMode(_In_ HANDLE hConsoleOutput, _In_ DWORD dwFlags, _Out_opt_ PCOORD lpNewScreenBufferDimensions);
+
+BOOL
+APIENTRY
+SetConsoleDisplayMode(
+  _In_ HANDLE hConsoleOutput,
+  _In_ DWORD dwFlags,
+  _Out_opt_ PCOORD lpNewScreenBufferDimensions);
+
 #endif
+
 COORD WINAPI GetLargestConsoleWindowSize(_In_ HANDLE);
-BOOL WINAPI GetNumberOfConsoleInputEvents(HANDLE,PDWORD);
+BOOL WINAPI GetNumberOfConsoleInputEvents(_In_ HANDLE, _Out_ PDWORD);
 BOOL WINAPI GetNumberOfConsoleMouseButtons(_Out_ PDWORD);
 
-BOOL WINAPI PeekConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+BOOL
+WINAPI PeekConsoleInputA(
+  _In_ HANDLE hConsoleInput,
+  _Out_writes_(nLength) PINPUT_RECORD lpBuffer,
+  _In_ DWORD nLength,
+  _Out_ LPDWORD lpNumberOfEventsRead);
 
 BOOL
 WINAPI
@@ -400,10 +451,43 @@ PeekConsoleInputW(
   _In_ DWORD nLength,
   _Out_ LPDWORD lpNumberOfEventsRead);
 
-BOOL WINAPI ReadConsoleA(HANDLE,PVOID,DWORD,PDWORD,PCONSOLE_READCONSOLE_CONTROL);
-BOOL WINAPI ReadConsoleW(HANDLE,PVOID,DWORD,PDWORD,PCONSOLE_READCONSOLE_CONTROL);
-BOOL WINAPI ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
-BOOL WINAPI ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleA(
+  _In_ HANDLE hConsoleInput,
+  _Out_writes_bytes_to_(nNumberOfCharsToRead * sizeof(CHAR), *lpNumberOfCharsRead * sizeof(CHAR)) LPVOID lpBuffer,
+  _In_ DWORD nNumberOfCharsToRead,
+  _Out_ _Deref_out_range_(<= , nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
+  _In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleW(
+  _In_ HANDLE hConsoleInput,
+  _Out_writes_bytes_to_(nNumberOfCharsToRead * sizeof(WCHAR), *lpNumberOfCharsRead * sizeof(WCHAR)) LPVOID lpBuffer,
+  _In_ DWORD nNumberOfCharsToRead,
+  _Out_ _Deref_out_range_(<= , nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
+  _In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleInputA(
+  _In_ HANDLE hConsoleInput,
+  _Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
+  _In_ DWORD nLength,
+  _Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleInputW(
+  _In_ HANDLE hConsoleInput,
+  _Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
+  _In_ DWORD nLength,
+  _Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead);
 
 BOOL
 WINAPI
@@ -450,20 +534,42 @@ ReadConsoleOutputW(
   _In_ COORD dwBufferCoord,
   _Inout_ PSMALL_RECT lpReadRegion);
 
-BOOL WINAPI ScrollConsoleScreenBufferA(_In_ HANDLE, _In_ const SMALL_RECT*, _In_opt_ const SMALL_RECT*, _In_ COORD, _In_ const CHAR_INFO*);
-BOOL WINAPI ScrollConsoleScreenBufferW(_In_ HANDLE, _In_ const SMALL_RECT*, _In_opt_ const SMALL_RECT*, _In_ COORD, _In_ const CHAR_INFO*);
+BOOL
+WINAPI
+ScrollConsoleScreenBufferA(
+  _In_ HANDLE,
+  _In_ const SMALL_RECT*,
+  _In_opt_ const SMALL_RECT*,
+  _In_ COORD,
+  _In_ const CHAR_INFO*);
+
+BOOL
+WINAPI
+ScrollConsoleScreenBufferW(
+  _In_ HANDLE,
+  _In_ const SMALL_RECT*,
+  _In_opt_ const SMALL_RECT*,
+  _In_ COORD,
+  _In_ const CHAR_INFO*);
+
 BOOL WINAPI SetConsoleActiveScreenBuffer(_In_ HANDLE);
 BOOL WINAPI SetConsoleCP(_In_ UINT);
-BOOL WINAPI SetConsoleCtrlHandler(PHANDLER_ROUTINE,BOOL);
+BOOL WINAPI SetConsoleCtrlHandler(_In_opt_ PHANDLER_ROUTINE, _In_ BOOL);
 BOOL WINAPI SetConsoleCursorInfo(_In_ HANDLE, _In_ const CONSOLE_CURSOR_INFO*);
 BOOL WINAPI SetConsoleCursorPosition(_In_ HANDLE, _In_ COORD);
-BOOL WINAPI SetConsoleMode(HANDLE,DWORD);
+BOOL WINAPI SetConsoleMode(_In_ HANDLE, _In_ DWORD);
 BOOL WINAPI SetConsoleOutputCP(_In_ UINT);
 BOOL WINAPI SetConsoleScreenBufferSize(_In_ HANDLE, _In_ COORD);
 BOOL WINAPI SetConsoleTextAttribute(_In_ HANDLE, _In_ WORD);
 BOOL WINAPI SetConsoleTitleA(_In_ LPCSTR);
 BOOL WINAPI SetConsoleTitleW(_In_ LPCWSTR);
-BOOL WINAPI SetConsoleWindowInfo(_In_ HANDLE, _In_ BOOL, _In_ const SMALL_RECT*);
+
+BOOL
+WINAPI
+SetConsoleWindowInfo(
+  _In_ HANDLE,
+  _In_ BOOL,
+  _In_ const SMALL_RECT*);
 
 /* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ConsoleMenuControl.php */
 HMENU WINAPI ConsoleMenuControl(_In_ HANDLE, _In_ DWORD, _In_ DWORD);
@@ -476,8 +582,23 @@ INT WINAPI ShowConsoleCursor(_In_ HANDLE, _In_ BOOL);
 /* Undocumented, see http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 */
 BOOL WINAPI SetConsolePalette(_In_ HANDLE, _In_ HPALETTE, _In_ UINT);
 
-BOOL WINAPI WriteConsoleA(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
-BOOL WINAPI WriteConsoleW(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
+BOOL
+WINAPI
+WriteConsoleA(
+  _In_ HANDLE hConsoleOutput,
+  _In_reads_(nNumberOfCharsToWrite) CONST VOID *lpBuffer,
+  _In_ DWORD nNumberOfCharsToWrite,
+  _Out_opt_ LPDWORD lpNumberOfCharsWritten,
+  _Reserved_ LPVOID lpReserved);
+
+BOOL
+WINAPI
+WriteConsoleW(
+  _In_ HANDLE hConsoleOutput,
+  _In_reads_(nNumberOfCharsToWrite) CONST VOID *lpBuffer,
+  _In_ DWORD nNumberOfCharsToWrite,
+  _Out_opt_ LPDWORD lpNumberOfCharsWritten,
+  _Reserved_ LPVOID lpReserved);
 
 BOOL
 WINAPI
@@ -590,4 +711,5 @@ WriteConsoleOutputCharacterW(
 #ifdef __cplusplus
 }
 #endif
-#endif
+
+#endif /* _WINCON_H */
index 75283ec..9c1e612 100644 (file)
@@ -546,207 +546,207 @@ struct sockproto {
 SOCKET
 PASCAL FAR
 accept(
-  IN SOCKET s,
-  OUT struct sockaddr FAR *addr OPTIONAL,
-  IN OUT int FAR *addrlen OPTIONAL);
+  _In_ SOCKET s,
+  _Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR *addr,
+  _Inout_opt_ int FAR *addrlen);
 
 int
 PASCAL FAR
 bind(
-  IN SOCKET s,
-  IN const struct sockaddr FAR *addr,
-  IN int namelen);
+  _In_ SOCKET s,
+  _In_reads_bytes_(namelen) const struct sockaddr FAR *addr,
+  _In_ int namelen);
 
 int
 PASCAL FAR
 closesocket(
-  IN SOCKET s);
+  _In_ SOCKET s);
 
 int
 PASCAL FAR
 connect(
-  IN SOCKET s,
-  IN const struct sockaddr FAR *name,
-  IN int namelen);
+  _In_ SOCKET s,
+  _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
+  _In_ int namelen);
 
 int
 PASCAL FAR
 ioctlsocket(
-  IN SOCKET s,
-  IN long cmd,
-  IN OUT u_long FAR *argp);
+  _In_ SOCKET s,
+  _In_ long cmd,
+  _Inout_ u_long FAR *argp);
 
 int
 PASCAL FAR
 getpeername(
-  IN SOCKET s,
-  OUT struct sockaddr FAR *name,
-  IN OUT int FAR *namelen);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(*namelen, *namelen) struct sockaddr FAR *name,
+  _Inout_ int FAR *namelen);
 
 int
 PASCAL FAR
 getsockname(
-  IN SOCKET s,
-  OUT struct sockaddr FAR *name,
-  IN OUT int FAR *namelen);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(*namelen, *namelen) struct sockaddr FAR *name,
+  _Inout_ int FAR *namelen);
 
 int
 PASCAL FAR
 getsockopt(
-  IN SOCKET s,
-  IN int level,
-  IN int optname,
-  OUT char FAR *optval,
-  IN OUT int FAR *optlen);
+  _In_ SOCKET s,
+  _In_ int level,
+  _In_ int optname,
+  _Out_writes_bytes_(*optlen) char FAR *optval,
+  _Inout_ int FAR *optlen);
 
 u_long
 PASCAL FAR
 htonl(
-  IN u_long hostlong);
+  _In_ u_long hostlong);
 
 u_short
 PASCAL FAR
 htons(
-  IN u_short hostshort);
+  _In_ u_short hostshort);
 
 unsigned long
 PASCAL FAR
 inet_addr(
-  IN const char FAR *cp);
+  _In_z_ const char FAR *cp);
 
 char FAR
 *PASCAL FAR
 inet_ntoa(
-  IN struct in_addr in);
+  _In_ struct in_addr in);
 
 int
 PASCAL FAR
 listen(
-  IN SOCKET s,
-  IN int backlog);
+  _In_ SOCKET s,
+  _In_ int backlog);
 
 u_long
 PASCAL FAR
 ntohl(
-  IN u_long netlong);
+  _In_ u_long netlong);
 
 u_short
 PASCAL FAR
 ntohs(
-  IN u_short netshort);
+  _In_ u_short netshort);
 
 int
 PASCAL FAR
 recv(
-  IN SOCKET s,
-  OUT char FAR *buf,
-  IN int len,
-  IN int flags);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR *buf,
+  _In_ int len,
+  _In_ int flags);
 
 int
 PASCAL FAR
 recvfrom(
-  IN SOCKET s,
-  OUT char FAR *buf,
-  IN int len,
-  IN int flags,
-  OUT struct sockaddr FAR *from OPTIONAL,
-  IN OUT int FAR * fromlen OPTIONAL);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR *buf,
+  _In_ int len,
+  _In_ int flags,
+  _Out_writes_bytes_to_opt_(*fromlen, *fromlen) struct sockaddr FAR *from,
+  _Inout_opt_ int FAR * fromlen);
 
 int
 PASCAL FAR
 select(
-  IN int nfds,
-  IN OUT fd_set FAR *readfds OPTIONAL,
-  IN OUT fd_set FAR *writefds OPTIONAL,
-  IN OUT fd_set FAR *exceptfds OPTIONAL,
-  IN const struct timeval FAR *timeout OPTIONAL);
+  _In_ int nfds,
+  _Inout_opt_ fd_set FAR *readfds,
+  _Inout_opt_ fd_set FAR *writefds,
+  _Inout_opt_ fd_set FAR *exceptfds,
+  _In_opt_ const struct timeval FAR *timeout);
 
 int
 PASCAL FAR
 send(
-  IN SOCKET s,
-  IN const char FAR *buf,
-  IN int len,
-  IN int flags);
+  _In_ SOCKET s,
+  _In_reads_bytes_(len) const char FAR *buf,
+  _In_ int len,
+  _In_ int flags);
 
 int
 PASCAL FAR
 sendto(
-  IN SOCKET s,
-  IN const char FAR *buf,
-  IN int len,
-  IN int flags,
-  IN const struct sockaddr FAR *to OPTIONAL,
-  IN int tolen);
+  _In_ SOCKET s,
+  _In_reads_bytes_(len) const char FAR *buf,
+  _In_ int len,
+  _In_ int flags,
+  _In_reads_bytes_opt_(tolen) const struct sockaddr FAR *to,
+  _In_ int tolen);
 
 int
 PASCAL FAR
 setsockopt(
-  IN SOCKET s,
-  IN int level,
-  IN int optname,
-  IN const char FAR *optval OPTIONAL,
-  IN int optlen);
+  _In_ SOCKET s,
+  _In_ int level,
+  _In_ int optname,
+  _In_reads_bytes_opt_(optlen) const char FAR *optval,
+  _In_ int optlen);
 
 int
 PASCAL FAR
 shutdown(
-  IN SOCKET s,
-  IN int how);
+  _In_ SOCKET s,
+  _In_ int how);
 
 SOCKET
 PASCAL FAR
 socket(
-  IN int af,
-  IN int type,
-  IN int protocol);
+  _In_ int af,
+  _In_ int type,
+  _In_ int protocol);
 
 struct hostent FAR
 *PASCAL FAR
 gethostbyaddr(
-  IN const char FAR *addr,
-  IN int len,
-  IN int type);
+  _In_reads_bytes_(len) const char FAR *addr,
+  _In_ int len,
+  _In_ int type);
 
 struct hostent FAR
 *PASCAL FAR
 gethostbyname(
-  IN const char FAR *name);
+  _In_z_ const char FAR *name);
 
 int
 PASCAL FAR
 gethostname(
-  OUT char FAR *name,
-  IN int namelen);
+  _Out_writes_bytes_to_(namelen, return) char FAR *name,
+  _In_ int namelen);
 
 struct servent FAR
 *PASCAL FAR
 getservbyport(
-  IN int port,
-  IN const char FAR *proto);
+  _In_ int port,
+  _In_z_ const char FAR *proto);
 
 struct servent FAR
 *PASCAL FAR
 getservbyname(
-  IN const char FAR *name,
-  IN const char FAR *proto);
+  _In_z_ const char FAR *name,
+  _In_z_ const char FAR *proto);
 
 struct protoent FAR
 *PASCAL FAR
 getprotobynumber(
-  IN int number);
+  _In_ int number);
 
 struct protoent FAR
 *PASCAL FAR
 getprotobyname(
-  IN const char FAR *name);
+  _In_z_ const char FAR *name);
 
 int
 PASCAL FAR
 WSAStartup(
-  IN WORD wVersionRequired,
-  OUT LPWSADATA lpWSAData);
+  _In_ WORD wVersionRequired,
+  _Out_ LPWSADATA lpWSAData);
 
 int
 PASCAL FAR
@@ -755,7 +755,7 @@ WSACleanup(void);
 void
 PASCAL FAR
 WSASetLastError(
-  IN int iError);
+  _In_ int iError);
 
 int
 PASCAL FAR
@@ -772,7 +772,7 @@ WSAUnhookBlockingHook(void);
 FARPROC
 PASCAL FAR
 WSASetBlockingHook(
-  IN FARPROC lpBlockFunc);
+  _In_ FARPROC lpBlockFunc);
 
 int
 PASCAL FAR
@@ -781,81 +781,81 @@ WSACancelBlockingCall(void);
 HANDLE
 PASCAL FAR
 WSAAsyncGetServByName(
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN const char FAR *name,
-  IN const char FAR *proto,
-  OUT char FAR *buf,
-  IN int buflen);
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_z_ const char FAR *name,
+  _In_z_ const char FAR *proto,
+  _Out_writes_bytes_(buflen) char FAR *buf,
+  _In_ int buflen);
 
 HANDLE
 PASCAL FAR
 WSAAsyncGetServByPort(
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN int port,
-  IN const char FAR *proto,
-  OUT char FAR *buf,
-  IN int buflen);
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_ int port,
+  _In_ const char FAR *proto,
+  _Out_writes_bytes_(buflen) char FAR *buf,
+  _In_ int buflen);
 
 HANDLE
 PASCAL FAR
 WSAAsyncGetProtoByName(
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN const char FAR *name,
-  OUT char FAR *buf,
-  IN int buflen);
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_z_ const char FAR *name,
+  _Out_writes_bytes_(buflen) char FAR *buf,
+  _In_ int buflen);
 
 HANDLE
 PASCAL FAR
 WSAAsyncGetProtoByNumber(
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN int number,
-  OUT char FAR *buf,
-  IN int buflen);
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_ int number,
+  _Out_writes_bytes_(buflen) char FAR *buf,
+  _In_ int buflen);
 
 HANDLE
 PASCAL FAR
 WSAAsyncGetHostByName(
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN const char FAR *name,
-  OUT char FAR *buf,
-  IN int buflen);
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_z_ const char FAR *name,
+  _Out_writes_bytes_(buflen) char FAR *buf,
+  _In_ int buflen);
 
 HANDLE
 PASCAL FAR
 WSAAsyncGetHostByAddr(
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN const char FAR *addr,
-  IN int len,
-  IN int type,
-  OUT char FAR *buf,
-  IN int buflen);
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_ const char FAR *addr,
+  _In_ int len,
+  _In_ int type,
+  _Out_writes_bytes_(buflen) char FAR *buf,
+  _In_ int buflen);
 
 int
 PASCAL FAR
 WSACancelAsyncRequest(
-  IN HANDLE hAsyncTaskHandle);
+  _In_ HANDLE hAsyncTaskHandle);
 
 int
 PASCAL FAR
 WSAAsyncSelect(
-  IN SOCKET s,
-  IN HWND hWnd,
-  IN u_int wMsg,
-  IN long lEvent);
+  _In_ SOCKET s,
+  _In_ HWND hWnd,
+  _In_ u_int wMsg,
+  _In_ long lEvent);
 
 int
 PASCAL FAR
 WSARecvEx(
-  IN SOCKET s,
-  OUT char FAR *buf,
-  IN int len,
-  IN OUT int FAR *flags);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR *buf,
+  _In_ int len,
+  _Inout_ int FAR *flags);
 
 typedef struct _TRANSMIT_FILE_BUFFERS {
   PVOID Head;
@@ -867,37 +867,37 @@ typedef struct _TRANSMIT_FILE_BUFFERS {
 BOOL
 PASCAL FAR
 TransmitFile(
-  IN SOCKET hSocket,
-  IN HANDLE hFile,
-  IN DWORD nNumberOfBytesToWrite,
-  IN DWORD nNumberOfBytesPerSend,
-  IN OUT LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers OPTIONAL,
-  IN DWORD dwReserved);
+  _In_ SOCKET hSocket,
+  _In_ HANDLE hFile,
+  _In_ DWORD nNumberOfBytesToWrite,
+  _In_ DWORD nNumberOfBytesPerSend,
+  _Inout_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
+  _In_ DWORD dwReserved);
 
 BOOL
 PASCAL FAR
 AcceptEx(
-  IN SOCKET sListenSocket,
-  IN SOCKET sAcceptSocket,
-  OUT PVOID lpOutputBuffer,
-  IN DWORD dwReceiveDataLength,
-  IN DWORD dwLocalAddressLength,
-  IN DWORD dwRemoteAddressLength,
-  OUT LPDWORD lpdwBytesReceived,
-  IN OUT LPOVERLAPPED lpOverlapped);
+  _In_ SOCKET sListenSocket,
+  _In_ SOCKET sAcceptSocket,
+  _Out_writes_bytes_to_(dwReceiveDataLength + dwLocalAddressLength + dwRemoteAddressLength, *lpdwBytesReceived) PVOID lpOutputBuffer,
+  _In_ DWORD dwReceiveDataLength,
+  _In_ DWORD dwLocalAddressLength,
+  _In_ DWORD dwRemoteAddressLength,
+  _Out_ LPDWORD lpdwBytesReceived,
+  _Inout_ LPOVERLAPPED lpOverlapped);
 
 VOID
 PASCAL FAR
 GetAcceptExSockaddrs(
-  IN PVOID lpOutputBuffer,
-  IN DWORD dwReceiveDataLength,
-  IN DWORD dwLocalAddressLength,
-  IN DWORD dwRemoteAddressLength,
-  OUT struct sockaddr **LocalSockaddr,
-  OUT LPINT LocalSockaddrLength,
-  OUT struct sockaddr **RemoteSockaddr,
-  OUT LPINT RemoteSockaddrLength);
+  _In_reads_bytes_(dwReceiveDataLength + dwLocalAddressLength + dwRemoteAddressLength) PVOID lpOutputBuffer,
+  _In_ DWORD dwReceiveDataLength,
+  _In_ DWORD dwLocalAddressLength,
+  _In_ DWORD dwRemoteAddressLength,
+  _Outptr_result_bytebuffer_(*LocalSockaddrLength) struct sockaddr **LocalSockaddr,
+  _Out_ LPINT LocalSockaddrLength,
+  _Outptr_result_bytebuffer_(*RemoteSockaddrLength) struct sockaddr **RemoteSockaddr,
+  _Out_ LPINT RemoteSockaddrLength);
 
 #if(_WIN32_WINNT >= 0x0501)
 
index 3126c22..6fb353d 100644 (file)
@@ -15,6 +15,7 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  *
  */
+
 #pragma once
 
 #define _WS2SPI_H
@@ -52,14 +53,16 @@ typedef BOOL
 (CALLBACK FAR *LPBLOCKINGCALLBACK)(
   DWORD_PTR dwContext);
 
-typedef SOCKET
+typedef
+_Must_inspect_result_
+SOCKET
 (WSPAPI *LPWSPACCEPT)(
-  IN SOCKET s,
-  OUT struct sockaddr FAR *addr OPTIONAL,
-  IN OUT LPINT addrlen OPTIONAL,
-  IN LPCONDITIONPROC lpfnCondition OPTIONAL,
-  IN DWORD_PTR dwCallbackData OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_opt_(*addrlen, *addrlen) struct sockaddr FAR *addr,
+  _Inout_opt_ LPINT addrlen,
+  _In_opt_ LPCONDITIONPROC lpfnCondition,
+  _In_opt_ DWORD_PTR dwCallbackData,
+  _Out_ LPINT lpErrno);
 
 typedef VOID
 (CALLBACK FAR *LPWSAUSERAPC)(
@@ -67,387 +70,391 @@ typedef VOID
 
 typedef INT
 (WSPAPI *LPWSPADDRESSTOSTRING)(
-  IN LPSOCKADDR lpsaAddress,
-  IN DWORD dwAddressLength,
-  IN LPWSAPROTOCOL_INFOW lpProtocolInfo OPTIONAL,
-  OUT LPWSTR lpszAddressString,
-  IN OUT LPDWORD lpdwAddressStringLength,
-  OUT LPINT lpErrno);
+  _In_reads_bytes_(dwAddressLength) LPSOCKADDR lpsaAddress,
+  _In_ DWORD dwAddressLength,
+  _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+  _Out_writes_to_(*lpdwAddressStringLength, *lpdwAddressStringLength) LPWSTR lpszAddressString,
+  _Inout_ LPDWORD lpdwAddressStringLength,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPASYNCSELECT)(
-  IN SOCKET s,
-  IN HWND hWnd,
-  IN unsigned int wMsg,
-  IN long lEvent,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ HWND hWnd,
+  _In_ unsigned int wMsg,
+  _In_ long lEvent,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPBIND)(
-  IN SOCKET s,
-  IN const struct sockaddr FAR *name,
-  IN int namelen,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
+  _In_ int namelen,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPCANCELBLOCKINGCALL)(
-  OUT LPINT lpErrno);
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPCLEANUP)(
-  OUT LPINT lpErrno);
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPCLOSESOCKET)(
-  IN SOCKET s,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPCONNECT)(
-  IN SOCKET s,
-  IN const struct sockaddr FAR *name,
-  IN int namelen,
-  IN LPWSABUF lpCallerData OPTIONAL,
-  OUT LPWSABUF lpCalleeData OPTIONAL,
-  IN LPQOS lpSQOS OPTIONAL,
-  IN LPQOS lpGQOS OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
+  _In_ int namelen,
+  _In_opt_ LPWSABUF lpCallerData,
+  _Out_opt_ LPWSABUF lpCalleeData,
+  _In_opt_ LPQOS lpSQOS,
+  _In_opt_ LPQOS lpGQOS,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPDUPLICATESOCKET)(
-  IN SOCKET s,
-  IN DWORD dwProcessId,
-  OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ DWORD dwProcessId,
+  _Out_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPENUMNETWORKEVENTS)(
-  IN SOCKET s,
-  IN WSAEVENT hEventObject,
-  OUT LPWSANETWORKEVENTS lpNetworkEvents,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ WSAEVENT hEventObject,
+  _Out_ LPWSANETWORKEVENTS lpNetworkEvents,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPEVENTSELECT)(
-  IN SOCKET s,
-  IN WSAEVENT hEventObject,
-  IN long lNetworkEvents,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_opt_ WSAEVENT hEventObject,
+  _In_ long lNetworkEvents,
+  _Out_ LPINT lpErrno);
 
 typedef BOOL
 (WSPAPI *LPWSPGETOVERLAPPEDRESULT)(
-  IN SOCKET s,
-  IN LPWSAOVERLAPPED lpOverlapped,
-  OUT LPDWORD lpcbTransfer,
-  IN BOOL fWait,
-  OUT LPDWORD lpdwFlags,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ LPWSAOVERLAPPED lpOverlapped,
+  _Out_ LPDWORD lpcbTransfer,
+  _In_ BOOL fWait,
+  _Out_ LPDWORD lpdwFlags,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPGETPEERNAME)(
-  IN SOCKET s,
-  OUT struct sockaddr FAR *name,
-  IN OUT LPINT namelen,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(*namelen, *namelen) struct sockaddr FAR *name,
+  _Inout_ LPINT namelen,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPGETSOCKNAME)(
-  IN SOCKET s,
-  OUT struct sockaddr FAR *name,
-  IN OUT LPINT namelen,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_writes_bytes_to_(*namelen, *namelen) struct sockaddr FAR *name,
+  _Inout_ LPINT namelen,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPGETSOCKOPT)(
-  IN SOCKET s,
-  IN int level,
-  IN int optname,
-  OUT char FAR *optval,
-  IN OUT LPINT optlen,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ int level,
+  _In_ int optname,
+  _Out_writes_bytes_(*optlen) char FAR *optval,
+  _Inout_ LPINT optlen,
+  _Out_ LPINT lpErrno);
 
 typedef BOOL
 (WSPAPI *LPWSPGETQOSBYNAME)(
-  IN SOCKET s,
-  IN LPWSABUF lpQOSName,
-  OUT LPQOS lpQOS,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ LPWSABUF lpQOSName,
+  _Out_ LPQOS lpQOS,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPIOCTL)(
-  IN SOCKET s,
-  IN DWORD dwIoControlCode,
-  IN LPVOID lpvInBuffer OPTIONAL,
-  IN DWORD cbInBuffer,
-  OUT LPVOID lpvOutBuffer OPTIONAL,
-  IN DWORD cbOutBuffer,
-  OUT LPDWORD lpcbBytesReturned,
-  IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  IN LPWSATHREADID lpThreadId OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ DWORD dwIoControlCode,
+  _In_reads_bytes_opt_(cbInBuffer) LPVOID lpvInBuffer,
+  _In_ DWORD cbInBuffer,
+  _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
+  _In_ DWORD cbOutBuffer,
+  _Out_ LPDWORD lpcbBytesReturned,
+  _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+  _In_opt_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 typedef SOCKET
 (WSPAPI *LPWSPJOINLEAF)(
-  IN SOCKET s,
-  IN const struct sockaddr FAR *name,
-  IN int namelen,
-  IN LPWSABUF lpCallerData OPTIONAL,
-  OUT LPWSABUF lpCalleeData OPTIONAL,
-  IN LPQOS lpSQOS OPTIONAL,
-  IN LPQOS lpGQOS OPTIONAL,
-  IN DWORD dwFlags,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_bytes_(namelen) const struct sockaddr FAR *name,
+  _In_ int namelen,
+  _In_opt_ LPWSABUF lpCallerData,
+  _Out_opt_ LPWSABUF lpCalleeData,
+  _In_opt_ LPQOS lpSQOS,
+  _In_opt_ LPQOS lpGQOS,
+  _In_ DWORD dwFlags,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPLISTEN)(
-  IN SOCKET s,
-  IN int backlog,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ int backlog,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPRECV)(
-  IN SOCKET s,
-  IN LPWSABUF lpBuffers,
-  IN DWORD dwBufferCount,
-  OUT LPDWORD lpNumberOfBytesRecvd OPTIONAL,
-  IN OUT LPDWORD lpFlags,
-  IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  IN LPWSATHREADID lpThreadId OPTIONAL,
-  IN LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
+  _In_ DWORD dwBufferCount,
+  _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
+  _Inout_ LPDWORD lpFlags,
+  _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+  _In_opt_ LPWSATHREADID lpThreadId,
+  _In_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPRECVDISCONNECT)(
-  IN SOCKET s,
-  IN LPWSABUF lpInboundDisconnectData OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_opt_ LPWSABUF lpInboundDisconnectData,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPRECVFROM)(
-  IN SOCKET s,
-  IN LPWSABUF lpBuffers,
-  IN DWORD dwBufferCount,
-  OUT LPDWORD lpNumberOfBytesRecvd OPTIONAL,
-  IN OUT LPDWORD lpFlags,
-  OUT struct sockaddr FAR *lpFrom OPTIONAL,
-  IN OUT LPINT lpFromlen OPTIONAL,
-  IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  IN LPWSATHREADID lpThreadId OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
+  _In_ DWORD dwBufferCount,
+  _Out_opt_ LPDWORD lpNumberOfBytesRecvd,
+  _Inout_ LPDWORD lpFlags,
+  _Out_writes_bytes_to_opt_(*lpFromlen, *lpFromlen) struct sockaddr FAR *lpFrom,
+  _Inout_opt_ LPINT lpFromlen,
+  _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+  _In_opt_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPSELECT)(
-  IN int nfds,
-  IN OUT fd_set FAR *readfds OPTIONAL,
-  IN OUT fd_set FAR *writefds OPTIONAL,
-  IN OUT fd_set FAR *exceptfds OPTIONAL,
-  IN const struct timeval FAR *timeout OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ int nfds,
+  _Inout_opt_ fd_set FAR *readfds,
+  _Inout_opt_ fd_set FAR *writefds,
+  _Inout_opt_ fd_set FAR *exceptfds,
+  _In_opt_ const struct timeval FAR *timeout,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPSEND)(
-  IN SOCKET s,
-  IN LPWSABUF lpBuffers,
-  IN DWORD dwBufferCount,
-  OUT LPDWORD lpNumberOfBytesSent OPTIONAL,
-  IN DWORD dwFlags,
-  IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  IN LPWSATHREADID lpThreadId OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
+  _In_ DWORD dwBufferCount,
+  _Out_opt_ LPDWORD lpNumberOfBytesSent,
+  _In_ DWORD dwFlags,
+  _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+  _In_opt_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPSENDDISCONNECT)(
-  IN SOCKET s,
-  IN LPWSABUF lpOutboundDisconnectData OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_opt_ LPWSABUF lpOutboundDisconnectData,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPSENDTO)(
-  IN SOCKET s,
-  IN LPWSABUF lpBuffers,
-  IN DWORD dwBufferCount,
-  OUT LPDWORD lpNumberOfBytesSent OPTIONAL,
-  IN DWORD dwFlags,
-  IN const struct sockaddr FAR *lpTo OPTIONAL,
-  IN int iTolen,
-  IN OUT LPWSAOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  IN LPWSATHREADID lpThreadId OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_reads_(dwBufferCount) LPWSABUF lpBuffers,
+  _In_ DWORD dwBufferCount,
+  _Out_opt_ LPDWORD lpNumberOfBytesSent,
+  _In_ DWORD dwFlags,
+  _In_reads_bytes_opt_(iTolen) const struct sockaddr FAR *lpTo,
+  _In_ int iTolen,
+  _Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+  _In_opt_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPSETSOCKOPT)(
-  IN SOCKET s,
-  IN int level,
-  IN int optname,
-  IN const char FAR *optval OPTIONAL,
-  IN int optlen,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ int level,
+  _In_ int optname,
+  _In_reads_bytes_opt_(optlen) const char FAR *optval,
+  _In_ int optlen,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSPSHUTDOWN)(
-  IN SOCKET s,
-  IN int how,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _In_ int how,
+  _Out_ LPINT lpErrno);
 
-typedef SOCKET
+typedef
+_Must_inspect_result_
+SOCKET
 (WSPAPI *LPWSPSOCKET)(
-  IN int af,
-  IN int type,
-  IN int protocol,
-  IN LPWSAPROTOCOL_INFOW lpProtocolInfo OPTIONAL,
-  IN GROUP g,
-  IN DWORD dwFlags,
-  OUT LPINT lpErrno);
+  _In_ int af,
+  _In_ int type,
+  _In_ int protocol,
+  _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+  _In_ GROUP g,
+  _In_ DWORD dwFlags,
+  _Out_ LPINT lpErrno);
 
 typedef INT
 (WSPAPI *LPWSPSTRINGTOADDRESS)(
-  IN LPWSTR AddressString,
-  IN INT AddressFamily,
-  IN LPWSAPROTOCOL_INFOW lpProtocolInfo OPTIONAL,
-  OUT LPSOCKADDR lpAddress,
-  IN OUT LPINT lpAddressLength,
-  OUT LPINT lpErrno);
+  _In_ LPWSTR AddressString,
+  _In_ INT AddressFamily,
+  _In_opt_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+  _Out_writes_bytes_to_(*lpAddressLength, *lpAddressLength) LPSOCKADDR lpAddress,
+  _Inout_ LPINT lpAddressLength,
+  _Out_ LPINT lpErrno);
 
 typedef BOOL
 (WSPAPI *LPWPUCLOSEEVENT)(
-  IN WSAEVENT hEvent,
-  OUT LPINT lpErrno);
+  _In_ WSAEVENT hEvent,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUCLOSESOCKETHANDLE)(
-  IN SOCKET s,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_ LPINT lpErrno);
 
 typedef WSAEVENT
 (WSPAPI *LPWPUCREATEEVENT)(
-  OUT LPINT lpErrno);
+  _Out_ LPINT lpErrno);
 
-typedef SOCKET
+typedef
+_Must_inspect_result_
+SOCKET
 (WSPAPI *LPWPUCREATESOCKETHANDLE)(
-  IN DWORD dwCatalogEntryId,
-  IN DWORD_PTR dwContext,
-  OUT LPINT lpErrno);
+  _In_ DWORD dwCatalogEntryId,
+  _In_ DWORD_PTR dwContext,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUFDISSET)(
-  IN SOCKET s,
-  IN fd_set FAR *fdset);
+  _In_ SOCKET s,
+  _In_ fd_set FAR *fdset);
 
 typedef int
 (WSPAPI *LPWPUGETPROVIDERPATH)(
-  IN LPGUID lpProviderId,
-  OUT WCHAR FAR *lpszProviderDllPath,
-  IN OUT LPINT lpProviderDllPathLen,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_writes_(*lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
+  _Inout_ LPINT lpProviderDllPathLen,
+  _Out_ LPINT lpErrno);
 
 typedef SOCKET
 (WSPAPI *LPWPUMODIFYIFSHANDLE)(
-  IN DWORD dwCatalogEntryId,
-  IN SOCKET ProposedHandle,
-  OUT LPINT lpErrno);
+  _In_ DWORD dwCatalogEntryId,
+  _In_ SOCKET ProposedHandle,
+  _Out_ LPINT lpErrno);
 
 typedef BOOL
 (WSPAPI *LPWPUPOSTMESSAGE)(
-  IN HWND hWnd,
-  IN UINT Msg,
-  IN WPARAM wParam,
-  IN LPARAM lParam);
+  _In_ HWND hWnd,
+  _In_ UINT Msg,
+  _In_ WPARAM wParam,
+  _In_ LPARAM lParam);
 
 typedef int
 (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(
-  IN DWORD dwCatalogEntryId,
-  OUT LPBLOCKINGCALLBACK FAR *lplpfnCallback,
-  OUT PDWORD_PTR lpdwContext,
-  OUT LPINT lpErrno);
+  _In_ DWORD dwCatalogEntryId,
+  _Out_ LPBLOCKINGCALLBACK FAR *lplpfnCallback,
+  _Out_ PDWORD_PTR lpdwContext,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(
-  IN SOCKET s,
-  OUT PDWORD_PTR lpContext,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_ PDWORD_PTR lpContext,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUQUEUEAPC)(
-  IN LPWSATHREADID lpThreadId,
-  IN LPWSAUSERAPC lpfnUserApc,
-  IN DWORD_PTR dwContext,
-  OUT LPINT lpErrno);
+  _In_ LPWSATHREADID lpThreadId,
+  _In_ LPWSAUSERAPC lpfnUserApc,
+  _In_ DWORD_PTR dwContext,
+  _Out_ LPINT lpErrno);
 
 typedef BOOL
 (WSPAPI *LPWPURESETEVENT)(
-  IN WSAEVENT hEvent,
-  OUT LPINT lpErrno);
+  _In_ WSAEVENT hEvent,
+  _Out_ LPINT lpErrno);
 
 typedef BOOL
 (WSPAPI *LPWPUSETEVENT)(
-  IN WSAEVENT hEvent,
-  OUT LPINT lpErrno);
+  _In_ WSAEVENT hEvent,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUOPENCURRENTTHREAD)(
-  OUT LPWSATHREADID lpThreadId,
-  OUT LPINT lpErrno);
+  _Out_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUCLOSETHREAD)(
-  IN LPWSATHREADID lpThreadId,
-  OUT LPINT lpErrno);
+  _In_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)(
-  IN SOCKET s,
-  IN OUT LPWSAOVERLAPPED lpOverlapped,
-  IN DWORD dwError,
-  IN DWORD cbTransferred,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Inout_ LPWSAOVERLAPPED lpOverlapped,
+  _In_ DWORD dwError,
+  _In_ DWORD cbTransferred,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSCENUMPROTOCOLS)(
-  IN LPINT lpiProtocols OPTIONAL,
-  OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer OPTIONAL,
-  IN OUT LPDWORD lpdwBufferLength,
-  OUT LPINT lpErrno);
+  _In_opt_ LPINT lpiProtocols,
+  _Out_writes_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferlength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
+  _Inout_ LPDWORD lpdwBufferLength,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSCDEINSTALLPROVIDER)(
-  IN LPGUID lpProviderId,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSCINSTALLPROVIDER)(
-  IN LPGUID lpProviderId,
-  IN const WCHAR FAR *lpszProviderDllPath,
-  IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_z_ const WCHAR FAR *lpszProviderDllPath,
+  _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSCGETPROVIDERPATH)(
-  IN LPGUID lpProviderId,
-  OUT WCHAR FAR *lpszProviderDllPath,
-  IN OUT LPINT lpProviderDllPathLen,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
+  _Inout_ LPINT lpProviderDllPathLen,
+  _Out_ LPINT lpErrno);
 
 typedef INT
 (WSPAPI *LPWSCINSTALLNAMESPACE)(
-  IN LPWSTR lpszIdentifier,
-  IN LPWSTR lpszPathName,
-  IN DWORD dwNameSpace,
-  IN DWORD dwVersion,
-  IN LPGUID lpProviderId);
+  _In_ LPWSTR lpszIdentifier,
+  _In_ LPWSTR lpszPathName,
+  _In_ DWORD dwNameSpace,
+  _In_ DWORD dwVersion,
+  _In_ LPGUID lpProviderId);
 
 typedef INT
 (WSPAPI *LPWSCUNINSTALLNAMESPACE)(
-  IN LPGUID lpProviderId);
+  _In_ LPGUID lpProviderId);
 
 typedef INT
 (WSPAPI *LPWSCENABLENSPROVIDER)(
-  IN LPGUID lpProviderId,
-  IN BOOL fEnable);
+  _In_ LPGUID lpProviderId,
+  _In_ BOOL fEnable);
 
 /* Service provider procedure table */
 typedef struct _WSPPROC_TABLE {
@@ -485,108 +492,110 @@ typedef struct _WSPPROC_TABLE {
 
 typedef INT
 (WSAAPI *LPNSPCLEANUP)(
-  IN LPGUID lpProviderId);
+  _In_ LPGUID lpProviderId);
 
 typedef INT
 (WSAAPI *LPNSPLOOKUPSERVICEBEGIN)(
-  IN LPGUID lpProviderId,
-  IN LPWSAQUERYSETW lpqsRestrictions,
-  IN LPWSASERVICECLASSINFOW lpServiceClassInfo,
-  IN DWORD dwControlFlags,
-  OUT LPHANDLE lphLookup);
+  _In_ LPGUID lpProviderId,
+  _In_ LPWSAQUERYSETW lpqsRestrictions,
+  _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo,
+  _In_ DWORD dwControlFlags,
+  _Out_ LPHANDLE lphLookup);
 
 typedef INT
 (WSAAPI *LPNSPLOOKUPSERVICENEXT)(
-  IN HANDLE hLookup,
-  IN DWORD dwControlFlags,
-  IN OUT LPDWORD lpdwBufferLength,
-  OUT LPWSAQUERYSETW lpqsResults);
+  _In_ HANDLE hLookup,
+  _In_ DWORD dwControlFlags,
+  _Inout_ LPDWORD lpdwBufferLength,
+  _Out_writes_bytes_to_(*lpdwBufferLength, *lpdwBufferLength) LPWSAQUERYSETW lpqsResults);
 
 #if(_WIN32_WINNT >= 0x0501)
 typedef INT
 (WSAAPI *LPNSPIOCTL)(
-  IN HANDLE hLookup,
-  IN DWORD dwControlCode,
-  IN LPVOID lpvInBuffer,
-  IN DWORD cbInBuffer,
-  OUT LPVOID lpvOutBuffer,
-  IN DWORD cbOutBuffer,
-  OUT LPDWORD lpcbBytesReturned,
-  IN LPWSACOMPLETION lpCompletion OPTIONAL,
-  IN LPWSATHREADID lpThreadId);
+  _In_ HANDLE hLookup,
+  _In_ DWORD dwControlCode,
+  _In_reads_bytes_(cbInBuffer) LPVOID lpvInBuffer,
+  _In_ DWORD cbInBuffer,
+  _Out_writes_bytes_to_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
+  _In_ DWORD cbOutBuffer,
+  _Out_ LPDWORD lpcbBytesReturned,
+  _In_opt_ LPWSACOMPLETION lpCompletion,
+  _In_ LPWSATHREADID lpThreadId);
 #endif
 
 typedef INT
 (WSAAPI *LPNSPLOOKUPSERVICEEND)(
-  IN HANDLE hLookup);
+  _In_ HANDLE hLookup);
 
 typedef INT
 (WSAAPI *LPNSPSETSERVICE)(
-  IN LPGUID lpProviderId,
-  IN LPWSASERVICECLASSINFOW lpServiceClassInfo,
-  IN LPWSAQUERYSETW lpqsRegInfo,
-  IN WSAESETSERVICEOP essOperation,
-  IN DWORD dwControlFlags);
+  _In_ LPGUID lpProviderId,
+  _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo,
+  _In_ LPWSAQUERYSETW lpqsRegInfo,
+  _In_ WSAESETSERVICEOP essOperation,
+  _In_ DWORD dwControlFlags);
 
 typedef INT
 (WSAAPI *LPNSPINSTALLSERVICECLASS)(
-  IN LPGUID lpProviderId,
-  IN LPWSASERVICECLASSINFOW lpServiceClassInfo);
+  _In_ LPGUID lpProviderId,
+  _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo);
 
 typedef INT
 (WSAAPI *LPNSPREMOVESERVICECLASS)(
-  IN LPGUID lpProviderId,
-  IN LPGUID lpServiceClassId);
+  _In_ LPGUID lpProviderId,
+  _In_ LPGUID lpServiceClassId);
 
 typedef INT
 (WSAAPI *LPNSPGETSERVICECLASSINFO)(
-  IN LPGUID lpProviderId,
-  IN LPDWORD lpdwBufSize,
-  IN LPWSASERVICECLASSINFOW lpServiceClassInfo);
+  _In_ LPGUID lpProviderId,
+  _In_ LPDWORD lpdwBufSize,
+  _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo);
 
-typedef INT
+typedef
+_Must_inspect_result_
+INT
 (WSAAPI *LPNSPV2STARTUP)(
-  IN LPGUID lpProviderId,
-  OUT LPVOID *ppvClientSessionArg);
+  _In_ LPGUID lpProviderId,
+  _Outptr_ LPVOID *ppvClientSessionArg);
 
 typedef INT
 (WSAAPI *LPNSPV2CLEANUP)(
-  IN LPGUID lpProviderId,
-  IN LPVOID pvClientSessionArg);
+  _In_ LPGUID lpProviderId,
+  _In_ LPVOID pvClientSessionArg);
 
 typedef INT
 (WSAAPI *LPNSPV2LOOKUPSERVICEBEGIN)(
-  IN LPGUID lpProviderId,
-  IN LPWSAQUERYSET2W lpqsRestrictions,
-  IN DWORD dwControlFlags,
-  IN LPVOID lpvClientSessionArg,
-  OUT LPHANDLE lphLookup);
+  _In_ LPGUID lpProviderId,
+  _In_ LPWSAQUERYSET2W lpqsRestrictions,
+  _In_ DWORD dwControlFlags,
+  _In_ LPVOID lpvClientSessionArg,
+  _Out_ LPHANDLE lphLookup);
 
 typedef VOID
 (WSAAPI *LPNSPV2LOOKUPSERVICENEXTEX)(
-  IN HANDLE hAsyncCall,
-  IN HANDLE hLookup,
-  IN DWORD dwControlFlags,
-  IN LPDWORD lpdwBufferLength,
-  OUT LPWSAQUERYSET2W lpqsResults);
+  _In_ HANDLE hAsyncCall,
+  _In_ HANDLE hLookup,
+  _In_ DWORD dwControlFlags,
+  _In_ LPDWORD lpdwBufferLength,
+  _Out_ LPWSAQUERYSET2W lpqsResults);
 
 typedef INT
 (WSAAPI *LPNSPV2LOOKUPSERVICEEND)(
-  IN HANDLE hLookup);
+  _In_ HANDLE hLookup);
 
 typedef VOID
 (WSAAPI *LPNSPV2SETSERVICEEX)(
-  IN HANDLE hAsyncCall,
-  IN LPGUID lpProviderId,
-  IN LPWSAQUERYSET2W lpqsRegInfo,
-  IN WSAESETSERVICEOP essOperation,
-  IN DWORD dwControlFlags,
-  IN LPVOID lpvClientSessionArg);
+  _In_ HANDLE hAsyncCall,
+  _In_ LPGUID lpProviderId,
+  _In_ LPWSAQUERYSET2W lpqsRegInfo,
+  _In_ WSAESETSERVICEOP essOperation,
+  _In_ DWORD dwControlFlags,
+  _In_ LPVOID lpvClientSessionArg);
 
 typedef VOID
 (WSAAPI *LPNSPV2CLIENTSESSIONRUNDOWN)(
-  IN LPGUID lpProviderId,
-  IN LPVOID pvClientSessionArg);
+  _In_ LPGUID lpProviderId,
+  _In_ LPVOID pvClientSessionArg);
 
 /* Service Provider upcall table */
 typedef struct _WSPUPCALLTABLE {
@@ -607,13 +616,15 @@ typedef struct _WSPUPCALLTABLE {
   LPWPUCLOSETHREAD lpWPUCloseThread;
 } WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
 
-typedef int
+typedef
+_Must_inspect_result_
+int
 (WSPAPI *LPWSPSTARTUP)(
-  IN WORD wVersionRequested,
-  IN LPWSPDATA lpWSPData,
-  IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
-  IN WSPUPCALLTABLE UpcallTable,
-  OUT LPWSPPROC_TABLE lpProcTable);
+  _In_ WORD wVersionRequested,
+  _In_ LPWSPDATA lpWSPData,
+  _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+  _In_ WSPUPCALLTABLE UpcallTable,
+  _Out_ LPWSPPROC_TABLE lpProcTable);
 
 #if (_WIN32_WINNT >= 0x0600)
 
@@ -654,10 +665,12 @@ typedef struct _NSP_ROUTINE {
   LPNSPIOCTL NSPIoctl;
 } NSP_ROUTINE, *PNSP_ROUTINE, FAR* LPNSP_ROUTINE;
 
-typedef INT
+typedef
+_Must_inspect_result_
+INT
 (WSAAPI *LPNSPSTARTUP)(
-  IN LPGUID lpProviderId,
-  IN OUT LPNSP_ROUTINE lpnspRoutines);
+  _In_ LPGUID lpProviderId,
+  _Inout_ LPNSP_ROUTINE lpnspRoutines);
 
 typedef struct _NSPV2_ROUTINE {
   DWORD cbSize;
@@ -673,36 +686,37 @@ typedef struct _NSPV2_ROUTINE {
 } NSPV2_ROUTINE, *PNSPV2_ROUTINE, *LPNSPV2_ROUTINE;
 typedef const NSPV2_ROUTINE *PCNSPV2_ROUTINE, *LPCNSPV2_ROUTINE;
 
+_Must_inspect_result_
 int
 WSPAPI
 WSPStartup(
-  IN WORD wVersionRequested,
-  IN LPWSPDATA lpWSPData,
-  IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
-  IN WSPUPCALLTABLE UpcallTable,
-  OUT LPWSPPROC_TABLE lpProcTable);
+  _In_ WORD wVersionRequested,
+  _In_ LPWSPDATA lpWSPData,
+  _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+  _In_ WSPUPCALLTABLE UpcallTable,
+  _Out_ LPWSPPROC_TABLE lpProcTable);
 
 int
 WSPAPI
 WSCEnumProtocols(
-  IN LPINT lpiProtocols OPTIONAL,
-  OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer OPTIONAL,
-  IN OUT LPDWORD lpdwBufferLength,
-  OUT LPINT lpErrno);
+  _In_opt_ LPINT lpiProtocols,
+  _Out_writes_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
+  _Inout_ LPDWORD lpdwBufferLength,
+  _Out_ LPINT lpErrno);
 
 #if (_WIN32_WINNT >= 0x0501)
 
 int
 WSPAPI
 WPUOpenCurrentThread(
-  OUT LPWSATHREADID lpThreadId,
-  OUT LPINT lpErrno);
+  _Out_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WPUCloseThread(
-  IN LPWSATHREADID lpThreadId,
-  OUT LPINT lpErrno);
+  _In_ LPWSATHREADID lpThreadId,
+  _Out_ LPINT lpErrno);
 
 #define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
 #define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
@@ -710,87 +724,88 @@ WPUCloseThread(
 int
 WSPAPI
 WSCUpdateProvider(
-  IN LPGUID lpProviderId,
-  IN const WCHAR FAR *lpszProviderDllPath,
-  IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_z_ const WCHAR FAR *lpszProviderDllPath,
+  _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_ LPINT lpErrno);
 
 typedef int
 (WSPAPI *LPWSCUPDATEPROVIDER)(
-  IN LPGUID lpProviderId,
-  IN const WCHAR FAR *lpszProviderDllPath,
-  IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_z_ const WCHAR FAR *lpszProviderDllPath,
+  _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_ LPINT lpErrno);
 
 #if defined(_WIN64)
 
 int
 WSPAPI
 WSCEnumProtocols32(
-  IN LPINT lpiProtocols OPTIONAL,
-  OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
-  IN OUT LPDWORD lpdwBufferLength,
-  OUT LPINT lpErrno);
+  _In_opt_ LPINT lpiProtocols,
+  _Out_writes_bytes_(*lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
+  _Inout_ LPDWORD lpdwBufferLength,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCDeinstallProvider32(
-  IN LPGUID lpProviderId,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCInstallProvider64_32(
-  IN LPGUID lpProviderId,
-  IN const WCHAR FAR *lpszProviderDllPath,
-  IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_z_ const WCHAR FAR *lpszProviderDllPath,
+  _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_ LPINT lpErrno);
 
+_Success_(return == 0)
 int
 WSPAPI
 WSCGetProviderPath32(
-  IN LPGUID lpProviderId,
-  OUT WCHAR FAR *lpszProviderDllPath,
-  IN OUT LPINT lpProviderDllPathLen,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
+  _Inout_ LPINT lpProviderDllPathLen,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCUpdateProvider32(
-  IN LPGUID lpProviderId,
-  IN const WCHAR FAR *lpszProviderDllPath,
-  IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_z_ const WCHAR FAR *lpszProviderDllPath,
+  _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_ LPINT lpErrno);
 
 INT
 WSAAPI
 WSCEnumNameSpaceProviders32(
-  IN OUT LPDWORD lpdwBufferLength,
-  OUT LPWSANAMESPACE_INFOW lpnspBuffer);
+  _Inout_ LPDWORD lpdwBufferLength,
+  _Out_writes_bytes_(*lpdwBufferLength) LPWSANAMESPACE_INFOW lpnspBuffer);
 
 INT
 WSPAPI
 WSCInstallNameSpace32(
-  IN LPWSTR lpszIdentifier,
-  IN LPWSTR lpszPathName,
-  IN DWORD dwNameSpace,
-  IN DWORD dwVersion,
-  IN LPGUID lpProviderId);
+  _In_ LPWSTR lpszIdentifier,
+  _In_ LPWSTR lpszPathName,
+  _In_ DWORD dwNameSpace,
+  _In_ DWORD dwVersion,
+  _In_ LPGUID lpProviderId);
 
 INT
 WSPAPI
 WSCUnInstallNameSpace32(
-  IN LPGUID lpProviderId);
+  _In_ LPGUID lpProviderId);
 
 INT
 WSPAPI
 WSCEnableNSProvider32(
-  IN LPGUID lpProviderId,
-  IN BOOL fEnable);
+  _In_ LPGUID lpProviderId,
+  _In_ BOOL fEnable);
 
 #endif /* defined(_WIN64) */
 
@@ -799,51 +814,51 @@ WSCEnableNSProvider32(
 int
 WSPAPI
 WSCDeinstallProvider(
-  IN LPGUID lpProviderId,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCInstallProvider(
-  IN LPGUID lpProviderId,
-  IN const WCHAR FAR *lpszProviderDllPath,
-  IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_z_ const WCHAR FAR *lpszProviderDllPath,
+  _In_reads_(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCGetProviderPath(
-  IN LPGUID lpProviderId,
-  OUT WCHAR FAR *lpszProviderDllPath,
-  IN OUT LPINT lpProviderDllPathLen,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_writes_to_(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
+  _Inout_ LPINT lpProviderDllPathLen,
+  _Out_ LPINT lpErrno);
 
 #if (_WIN32_WINNT < 0x0600)
 
 int
 WSPAPI
 WSCInstallQOSTemplate(
-  IN const LPGUID Guid,
-  IN LPWSABUF QosName,
-  IN LPQOS Qos);
+  _In_ const LPGUID Guid,
+  _In_ LPWSABUF QosName,
+  _In_ LPQOS Qos);
 
 typedef int
 (WSPAPI *LPWSCINSTALLQOSTEMPLATE)(
-  IN const LPGUID Guid,
-  IN LPWSABUF QosName,
-  IN LPQOS Qos);
+  _In_ const LPGUID Guid,
+  _In_ LPWSABUF QosName,
+  _In_ LPQOS Qos);
 
 int
 WSPAPI
 WSCRemoveQOSTemplate(
-  IN const LPGUID Guid,
-  IN LPWSABUF QosName);
+  _In_ const LPGUID Guid,
+  _In_ LPWSABUF QosName);
 
 typedef int
 (WSPAPI *LPWSCREMOVEQOSTEMPLATE)(
-  IN const LPGUID Guid,
-  IN LPWSABUF QosName);
+  _In_ const LPGUID Guid,
+  _In_ LPWSABUF QosName);
 
 #endif /* (_WIN32_WINNT < 0x0600) */
 
@@ -852,43 +867,43 @@ typedef int
 int
 WSPAPI
 WSCSetProviderInfo(
-  IN LPGUID lpProviderId,
-  IN WSC_PROVIDER_INFO_TYPE InfoType,
-  IN PBYTE Info,
-  IN size_t InfoSize,
-  IN DWORD Flags,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_ WSC_PROVIDER_INFO_TYPE InfoType,
+  _In_reads_bytes_(InfoSize) PBYTE Info,
+  _In_ size_t InfoSize,
+  _In_ DWORD Flags,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCGetProviderInfo(
-  IN LPGUID lpProviderId,
-  IN WSC_PROVIDER_INFO_TYPE InfoType,
-  OUT PBYTE Info,
-  IN OUT *InfoSize,
-  IN DWORD Flags,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_ WSC_PROVIDER_INFO_TYPE InfoType,
+  _Out_writes_bytes_to_(*InfoSize, *InfoSize) PBYTE Info,
+  _Inout_ *InfoSize,
+  _In_ DWORD Flags,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCSetApplicationCategory(
-  IN LPCWSTR Path,
-  IN DWORD PathLength,
-  IN LPCWSTR Extra OPTIONAL,
-  IN DWORD ExtraLength,
-  IN DWORD PermittedLspCategories,
-  OUT DWORD *pPrevPermLspCat OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_reads_(PathLength) LPCWSTR Path,
+  _In_ DWORD PathLength,
+  _In_reads_opt_(ExtraLength) LPCWSTR Extra,
+  _In_ DWORD ExtraLength,
+  _In_ DWORD PermittedLspCategories,
+  _Out_opt_ DWORD *pPrevPermLspCat,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCGetApplicationCategory(
-  IN LPCWSTR Path,
-  IN DWORD PathLength,
-  IN LPCWSTR Extra OPTIONAL,
-  IN DWORD ExtraLength,
-  OUT DWORD *pPermittedLspCategories,
-  OUT LPINT lpErrno);
+  _In_reads_(PathLength) LPCWSTR Path,
+  _In_ DWORD PathLength,
+  _In_reads_opt_(ExtraLength) LPCWSTR Extra,
+  _In_ DWORD ExtraLength,
+  _Out_ DWORD *pPermittedLspCategories,
+  _Out_ LPINT lpErrno);
 
 #define WSCEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExW
 #define LPFN_WSCENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXW
@@ -896,67 +911,67 @@ WSCGetApplicationCategory(
 INT
 WSPAPI
 WSCInstallNameSpaceEx(
-  IN LPWSTR lpszIdentifier,
-  IN LPWSTR lpszPathName,
-  IN DWORD dwNameSpace,
-  IN DWORD dwVersion,
-  IN LPGUID lpProviderId,
-  IN LPBLOB lpProviderSpecific);
+  _In_ LPWSTR lpszIdentifier,
+  _In_ LPWSTR lpszPathName,
+  _In_ DWORD dwNameSpace,
+  _In_ DWORD dwVersion,
+  _In_ LPGUID lpProviderId,
+  _In_ LPBLOB lpProviderSpecific);
 
 INT
 WSAAPI
 WSAAdvertiseProvider(
-  IN const GUID *puuidProviderId,
-  IN const LPCNSPV2_ROUTINE pNSPv2Routine);
+  _In_ const GUID *puuidProviderId,
+  _In_ const LPCNSPV2_ROUTINE pNSPv2Routine);
 
 INT
 WSAAPI
 WSAUnadvertiseProvider(
-  IN const GUID *puuidProviderId);
+  _In_ const GUID *puuidProviderId);
 
 INT
 WSAAPI
 WSAProviderCompleteAsyncCall(
-  IN HANDLE hAsyncCall,
-  IN INT iRetCode);
+  _In_ HANDLE hAsyncCall,
+  _In_ INT iRetCode);
 
 #if defined(_WIN64)
 
 int
 WSPAPI
 WSCSetProviderInfo32(
-  IN LPGUID lpProviderId,
-  IN WSC_PROVIDER_INFO_TYPE InfoType,
-  IN PBYTE Info,
-  IN size_t InfoSize,
-  IN DWORD Flags,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_ WSC_PROVIDER_INFO_TYPE InfoType,
+  _In_reads_bytes_(InfoSize) PBYTE Info,
+  _In_ size_t InfoSize,
+  _In_ DWORD Flags,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WSCGetProviderInfo32(
-  IN LPGUID lpProviderId,
-  IN WSC_PROVIDER_INFO_TYPE InfoType,
-  OUT PBYTE Info,
-  IN OUT size_t *InfoSize,
-  IN DWORD Flags,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _In_ WSC_PROVIDER_INFO_TYPE InfoType,
+  _Out_writes_bytes_to_(*InfoSize, *InfoSize) PBYTE Info,
+  _Inout_ size_t *InfoSize,
+  _In_ DWORD Flags,
+  _Out_ LPINT lpErrno);
 
 INT
 WSAAPI
 WSCEnumNameSpaceProvidersEx32(
-  IN OUT LPDWORD lpdwBufferLength,
-  OUT LPWSANAMESPACE_INFOEXW lpnspBuffer);
+  _Inout_ LPDWORD lpdwBufferLength,
+  _Out_writes_bytes_(*lpdwBufferLength) LPWSANAMESPACE_INFOEXW lpnspBuffer);
 
 INT
 WSPAPI
 WSCInstallNameSpaceEx32(
-  IN LPWSTR lpszIdentifier,
-  IN LPWSTR lpszPathName,
-  IN DWORD dwNameSpace,
-  IN DWORD dwVersion,
-  IN LPGUID lpProviderId,
-  IN LPBLOB lpProviderSpecific);
+  _In_ LPWSTR lpszIdentifier,
+  _In_ LPWSTR lpszPathName,
+  _In_ DWORD dwNameSpace,
+  _In_ DWORD dwVersion,
+  _In_ LPGUID lpProviderId,
+  _In_ LPBLOB lpProviderSpecific);
 
 #endif /* (_WIN64) */
 
@@ -969,142 +984,143 @@ int
 WSPAPI
 WSCInstallProviderAndChains(
 #endif
-  IN LPGUID lpProviderId,
-  IN const LPWSTR lpszProviderDllPath,
+  _In_ LPGUID lpProviderId,
+  _In_ const LPWSTR lpszProviderDllPath,
 #if defined(_WIN64)
-  IN const LPWSTR lpszProviderDllPath32,
+  _In_ const LPWSTR lpszProviderDllPath32,
 #endif
-  IN const LPWSTR lpszLspName,
-  IN DWORD dwServiceFlags,
-  IN OUT LPWSAPROTOCOL_INFOW lpProtocolInfoList,
-  IN DWORD dwNumberOfEntries,
-  OUT LPDWORD lpdwCatalogEntryId OPTIONAL,
-  OUT LPINT lpErrno);
+  _In_ const LPWSTR lpszLspName,
+  _In_ DWORD dwServiceFlags,
+  _Inout_updates_(dwNumberOfEntries) LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+  _In_ DWORD dwNumberOfEntries,
+  _Out_opt_ LPDWORD lpdwCatalogEntryId,
+  _Out_ LPINT lpErrno);
 
 #endif /* (_WIN32_WINNT >= 0x0600) */
 
 BOOL
 WSPAPI
 WPUCloseEvent(
-  IN WSAEVENT hEvent,
-  OUT LPINT lpErrno);
+  _In_ WSAEVENT hEvent,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WPUCloseSocketHandle(
-  IN SOCKET s,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_ LPINT lpErrno);
 
 WSAEVENT
 WSPAPI
 WPUCreateEvent(
-  OUT LPINT lpErrno);
+  _Out_ LPINT lpErrno);
 
 SOCKET
 WSPAPI
 WPUCreateSocketHandle(
-  IN DWORD dwCatalogEntryId,
-  IN DWORD_PTR dwContext,
-  OUT LPINT lpErrno);
+  _In_ DWORD dwCatalogEntryId,
+  _In_ DWORD_PTR dwContext,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WPUFDIsSet(
-  IN SOCKET s,
-  IN fd_set FAR *fdset);
+  _In_ SOCKET s,
+  _In_ fd_set FAR *fdset);
 
 int
 WSPAPI
 WPUGetProviderPath(
-  IN LPGUID lpProviderId,
-  OUT WCHAR FAR *lpszProviderDllPath,
-  IN OUT LPINT lpProviderDllPathLen,
-  OUT LPINT lpErrno);
+  _In_ LPGUID lpProviderId,
+  _Out_writes_(*lpProviderDllPathLen) WCHAR FAR *lpszProviderDllPath,
+  _Inout_ LPINT lpProviderDllPathLen,
+  _Out_ LPINT lpErrno);
 
 SOCKET
 WSPAPI
 WPUModifyIFSHandle(
-  IN DWORD dwCatalogEntryId,
-  IN SOCKET ProposedHandle,
-  OUT LPINT lpErrno);
+  _In_ DWORD dwCatalogEntryId,
+  _In_ SOCKET ProposedHandle,
+  _Out_ LPINT lpErrno);
 
 BOOL
 WSPAPI
 WPUPostMessage(
-  IN HWND hWnd,
-  IN UINT Msg,
-  IN WPARAM wParam,
-  IN LPARAM lParam);
+  _In_ HWND hWnd,
+  _In_ UINT Msg,
+  _In_ WPARAM wParam,
+  _In_ LPARAM lParam);
 
 int
 WSPAPI
 WPUQueryBlockingCallback(
-  IN DWORD dwCatalogEntryId,
-  OUT LPBLOCKINGCALLBACK FAR *lplpfnCallback,
-  OUT PDWORD_PTR lpdwContext,
-  OUT LPINT lpErrno);
+  _In_ DWORD dwCatalogEntryId,
+  _Out_ LPBLOCKINGCALLBACK FAR *lplpfnCallback,
+  _Out_ PDWORD_PTR lpdwContext,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WPUQuerySocketHandleContext(
-  IN SOCKET s,
-  OUT PDWORD_PTR lpContext,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Out_ PDWORD_PTR lpContext,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WPUQueueApc(
-  IN LPWSATHREADID lpThreadId,
-  IN LPWSAUSERAPC lpfnUserApc,
-  IN DWORD_PTR dwContext,
-  OUT LPINT lpErrno);
+  _In_ LPWSATHREADID lpThreadId,
+  _In_ LPWSAUSERAPC lpfnUserApc,
+  _In_ DWORD_PTR dwContext,
+  _Out_ LPINT lpErrno);
 
 BOOL
 WSPAPI
 WPUResetEvent(
-  IN WSAEVENT hEvent,
-  OUT LPINT lpErrno);
+  _In_ WSAEVENT hEvent,
+  _Out_ LPINT lpErrno);
 
 BOOL
 WSPAPI
 WPUSetEvent(
-  IN WSAEVENT hEvent,
-  OUT LPINT lpErrno);
+  _In_ WSAEVENT hEvent,
+  _Out_ LPINT lpErrno);
 
 int
 WSPAPI
 WPUCompleteOverlappedRequest(
-  IN SOCKET s,
-  IN OUT LPWSAOVERLAPPED lpOverlapped,
-  IN DWORD dwError,
-  IN DWORD cbTransferred,
-  OUT LPINT lpErrno);
+  _In_ SOCKET s,
+  _Inout_ LPWSAOVERLAPPED lpOverlapped,
+  _In_ DWORD dwError,
+  _In_ DWORD cbTransferred,
+  _Out_ LPINT lpErrno);
 
 INT
 WSPAPI
 WSCInstallNameSpace(
-  IN LPWSTR lpszIdentifier,
-  IN LPWSTR lpszPathName,
-  IN DWORD dwNameSpace,
-  IN DWORD dwVersion,
-  IN LPGUID lpProviderId);
+  _In_ LPWSTR lpszIdentifier,
+  _In_ LPWSTR lpszPathName,
+  _In_ DWORD dwNameSpace,
+  _In_ DWORD dwVersion,
+  _In_ LPGUID lpProviderId);
 
 INT
 WSPAPI
 WSCUnInstallNameSpace(
-  IN LPGUID lpProviderId);
+  _In_ LPGUID lpProviderId);
 
 INT
 WSPAPI
 WSCEnableNSProvider(
-  IN LPGUID lpProviderId,
-  IN BOOL fEnable);
+  _In_ LPGUID lpProviderId,
+  _In_ BOOL fEnable);
 
+_Must_inspect_result_
 INT
 WSAAPI
 NSPStartup(
-  IN LPGUID lpProviderId,
-  IN OUT LPNSP_ROUTINE lpnspRoutines);
+  _In_ LPGUID lpProviderId,
+  _Inout_ LPNSP_ROUTINE lpnspRoutines);
 
 #if !defined(_WIN64)
 #include <poppack.h>
index b4c8a04..8d8aaa7 100644 (file)
@@ -62,10 +62,10 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 getaddrinfo(
-  IN PCSTR pNodeName OPTIONAL,
-  IN PCSTR pServiceName OPTIONAL,
-  IN const ADDRINFOA *pHints OPTIONAL,
-  OUT PADDRINFOA *ppResult);
+  _In_opt_ PCSTR pNodeName,
+  _In_opt_ PCSTR pServiceName,
+  _In_opt_ const ADDRINFOA *pHints,
+  _Outptr_ PADDRINFOA *ppResult);
 
 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502)
 
@@ -73,10 +73,10 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 GetAddrInfoW(
-  IN PCWSTR pNodeName OPTIONAL,
-  IN PCWSTR pServiceName OPTIONAL,
-  IN const ADDRINFOW *pHints OPTIONAL,
-  OUT PADDRINFOW *ppResult);
+  _In_opt_ PCWSTR pNodeName,
+  _In_opt_ PCWSTR pServiceName,
+  _In_opt_ const ADDRINFOW *pHints,
+  _Outptr_ PADDRINFOW *ppResult);
 
 #define GetAddrInfoA getaddrinfo
 
@@ -92,17 +92,17 @@ GetAddrInfoW(
 
 typedef INT
 (WSAAPI *LPFN_GETADDRINFO)(
-  IN PCSTR pNodeName OPTIONAL,
-  IN PCSTR pServiceName OPTIONAL,
-  IN const ADDRINFOA *pHints OPTIONAL,
-  OUT PADDRINFOA *ppResult);
+  _In_opt_ PCSTR pNodeName,
+  _In_opt_ PCSTR pServiceName,
+  _In_opt_ const ADDRINFOA *pHints,
+  _Outptr_ PADDRINFOA *ppResult);
 
 typedef INT
 (WSAAPI *LPFN_GETADDRINFOW)(
-  IN PCWSTR pNodeName OPTIONAL,
-  IN PCWSTR pServiceName OPTIONAL,
-  IN const ADDRINFOW *pHints OPTIONAL,
-  OUT PADDRINFOW *ppResult);
+  _In_opt_ PCWSTR pNodeName,
+  _In_opt_ PCWSTR pServiceName,
+  _In_opt_ const ADDRINFOW *pHints,
+  _Outptr_ PADDRINFOW *ppResult);
 
 #define LPFN_GETADDRINFOA LPFN_GETADDRINFO
 
@@ -118,39 +118,39 @@ typedef INT
 
 typedef void
 (CALLBACK *LPLOOKUPSERVICE_COMPLETION_ROUTINE)(
-  IN DWORD dwError,
-  IN DWORD dwBytes,
-  IN LPWSAOVERLAPPED lpOverlapped);
+  _In_ DWORD dwError,
+  _In_ DWORD dwBytes,
+  _In_ LPWSAOVERLAPPED lpOverlapped);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 GetAddrInfoExA(
-  IN PCSTR pName OPTIONAL,
-  IN PCSTR pServiceName OPTIONAL,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN const ADDRINFOEXA *hints,
-  OUT PADDRINFOEXA *ppResult,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpNameHandle OPTIONAL);
+  _In_opt_ PCSTR pName,
+  _In_opt_ PCSTR pServiceName,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ const ADDRINFOEXA *hints,
+  _Outptr_ PADDRINFOEXA *ppResult,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpNameHandle);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 GetAddrInfoExW(
-  IN PCWSTR pName OPTIONAL,
-  IN PCWSTR pServiceName OPTIONAL,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN const ADDRINFOEXW *hints OPTIONAL,
-  OUT PADDRINFOEXW *ppResult,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpHandle OPTIONAL);
+  _In_opt_ PCWSTR pName,
+  _In_opt_ PCWSTR pServiceName,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ const ADDRINFOEXW *hints,
+  _Outptr_ PADDRINFOEXW *ppResult,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpHandle);
 
 #ifdef UNICODE
 #define GetAddrInfoEx GetAddrInfoExW
@@ -162,29 +162,29 @@ GetAddrInfoExW(
 
 typedef INT
 (WSAAPI *LPFN_GETADDRINFOEXA)(
-  IN PCSTR pName,
-  IN PCSTR pServiceName OPTIONAL,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN const ADDRINFOEXA *hints OPTIONAL,
-  OUT PADDRINFOEXA *ppResult,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpNameHandle OPTIONAL);
+  _In_ PCSTR pName,
+  _In_opt_ PCSTR pServiceName,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ const ADDRINFOEXA *hints,
+  _Outptr_ PADDRINFOEXA *ppResult,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpNameHandle);
 
 typedef INT
 (WSAAPI *LPFN_GETADDRINFOEXW)(
-  IN PCWSTR pName,
-  IN PCWSTR pServiceName OPTIONAL,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN const ADDRINFOEXW *hints OPTIONAL,
-  OUT PADDRINFOEXW *ppResult,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpHandle OPTIONAL);
+  _In_ PCWSTR pName,
+  _In_opt_ PCWSTR pServiceName,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ const ADDRINFOEXW *hints,
+  _Outptr_ PADDRINFOEXW *ppResult,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpHandle);
 
 #ifdef UNICODE
 #define LPFN_GETADDRINFOEX LPFN_GETADDRINFOEXW
@@ -201,35 +201,35 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 SetAddrInfoExA(
-  IN PCSTR pName,
-  IN PCSTR pServiceName OPTIONAL,
-  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
-  IN DWORD dwAddressCount,
-  IN LPBLOB lpBlob OPTIONAL,
-  IN DWORD dwFlags,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpNameHandle OPTIONAL);
+  _In_ PCSTR pName,
+  _In_opt_ PCSTR pServiceName,
+  _In_opt_ SOCKET_ADDRESS *pAddresses,
+  _In_ DWORD dwAddressCount,
+  _In_opt_ LPBLOB lpBlob,
+  _In_ DWORD dwFlags,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpNameHandle);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 SetAddrInfoExW(
-  IN PCWSTR pName,
-  IN PCWSTR pServiceName OPTIONAL,
-  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
-  IN DWORD dwAddressCount,
-  IN LPBLOB lpBlob OPTIONAL,
-  IN DWORD dwFlags,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpNameHandle OPTIONAL);
+  _In_ PCWSTR pName,
+  _In_opt_ PCWSTR pServiceName,
+  _In_opt_ SOCKET_ADDRESS *pAddresses,
+  _In_ DWORD dwAddressCount,
+  _In_opt_ LPBLOB lpBlob,
+  _In_ DWORD dwFlags,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpNameHandle);
 
 #ifdef UNICODE
 #define SetAddrInfoEx SetAddrInfoExW
@@ -241,33 +241,33 @@ SetAddrInfoExW(
 
 typedef INT
 (WSAAPI *LPFN_SETADDRINFOEXA)(
-  IN PCSTR pName,
-  IN PCSTR pServiceName OPTIONAL,
-  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
-  IN DWORD dwAddressCount,
-  IN LPBLOB lpBlob OPTIONAL,
-  IN DWORD dwFlags,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpNameHandle OPTIONAL);
+  _In_ PCSTR pName,
+  _In_opt_ PCSTR pServiceName,
+  _In_opt_ SOCKET_ADDRESS *pAddresses,
+  _In_ DWORD dwAddressCount,
+  _In_opt_ LPBLOB lpBlob,
+  _In_ DWORD dwFlags,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpNameHandle);
 
 typedef INT
 (WSAAPI *LPFN_SETADDRINFOEXW)(
-  IN PCWSTR pName,
-  IN PCWSTR pServiceName OPTIONAL,
-  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
-  IN DWORD dwAddressCount,
-  IN LPBLOB lpBlob OPTIONAL,
-  IN DWORD dwFlags,
-  IN DWORD dwNameSpace,
-  IN LPGUID lpNspId OPTIONAL,
-  IN struct timeval *timeout OPTIONAL,
-  IN LPOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
-  OUT LPHANDLE lpNameHandle OPTIONAL);
+  _In_ PCWSTR pName,
+  _In_opt_ PCWSTR pServiceName,
+  _In_opt_ SOCKET_ADDRESS *pAddresses,
+  _In_ DWORD dwAddressCount,
+  _In_opt_ LPBLOB lpBlob,
+  _In_ DWORD dwFlags,
+  _In_ DWORD dwNameSpace,
+  _In_opt_ LPGUID lpNspId,
+  _In_opt_ struct timeval *timeout,
+  _In_opt_ LPOVERLAPPED lpOverlapped,
+  _In_opt_ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
+  _Out_opt_ LPHANDLE lpNameHandle);
 
 #ifdef UNICODE
 #define LPFN_SETADDRINFOEX LPFN_SETADDRINFOEXW
@@ -282,7 +282,7 @@ WINSOCK_API_LINKAGE
 VOID
 WSAAPI
 freeaddrinfo(
-  IN PADDRINFOA pAddrInfo OPTIONAL);
+  _In_opt_ PADDRINFOA pAddrInfo);
 
 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502)
 
@@ -290,7 +290,7 @@ WINSOCK_API_LINKAGE
 VOID
 WSAAPI
 FreeAddrInfoW(
-  IN PADDRINFOW pAddrInfo OPTIONAL);
+  _In_opt_ PADDRINFOW pAddrInfo);
 
 #define FreeAddrInfoA freeaddrinfo
 
@@ -305,11 +305,11 @@ FreeAddrInfoW(
 
 typedef VOID
 (WSAAPI *LPFN_FREEADDRINFO)(
-  IN PADDRINFOA pAddrInfo OPTIONAL);
+  _In_opt_ PADDRINFOA pAddrInfo);
 
 typedef VOID
 (WSAAPI *LPFN_FREEADDRINFOW)(
-  IN PADDRINFOW pAddrInfo OPTIONAL);
+  _In_opt_ PADDRINFOW pAddrInfo);
 
 #define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
 
@@ -327,13 +327,13 @@ WINSOCK_API_LINKAGE
 void
 WSAAPI
 FreeAddrInfoEx(
-  IN PADDRINFOEXA pAddrInfoEx OPTIONAL);
+  _In_opt_ PADDRINFOEXA pAddrInfoEx);
 
 WINSOCK_API_LINKAGE
 void
 WSAAPI
 FreeAddrInfoExW(
-  IN PADDRINFOEXW pAddrInfoEx OPTIONAL);
+  _In_opt_ PADDRINFOEXW pAddrInfoEx);
 
 #define FreeAddrInfoExA FreeAddrInfoEx
 
@@ -345,11 +345,11 @@ FreeAddrInfoExW(
 
 typedef void
 (WSAAPI *LPFN_FREEADDRINFOEXA)(
-  IN PADDRINFOEXA pAddrInfoEx);
+  _In_ PADDRINFOEXA pAddrInfoEx);
 
 typedef void
 (WSAAPI *LPFN_FREEADDRINFOEXW)(
-  IN PADDRINFOEXW pAddrInfoEx);
+  _In_ PADDRINFOEXW pAddrInfoEx);
 
 
 #ifdef UNICODE
@@ -367,13 +367,13 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 getnameinfo(
-  IN const SOCKADDR *pSockaddr,
-  IN socklen_t SockaddrLength,
-  OUT PCHAR pNodeBuffer OPTIONAL,
-  IN DWORD NodeBufferSize,
-  OUT PCHAR pServiceBuffer,
-  IN DWORD ServiceBufferSize,
-  IN INT Flags);
+  _In_reads_bytes_(SockaddrLength) const SOCKADDR *pSockaddr,
+  _In_ socklen_t SockaddrLength,
+  _Out_writes_opt_(NodeBufferSize) PCHAR pNodeBuffer,
+  _In_ DWORD NodeBufferSize,
+  _Out_writes_opt_(ServiceBufferSize) PCHAR pServiceBuffer,
+  _In_ DWORD ServiceBufferSize,
+  _In_ INT Flags);
 
 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502)
 
@@ -381,13 +381,13 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 GetNameInfoW(
-  IN const SOCKADDR *pSockaddr,
-  IN socklen_t SockaddrLength,
-  OUT PWCHAR pNodeBuffer,
-  IN DWORD NodeBufferSize,
-  OUT PWCHAR pServiceBuffer OPTIONAL,
-  IN DWORD ServiceBufferSize,
-  IN INT Flags);
+  _In_reads_bytes_(SockaddrLength) const SOCKADDR *pSockaddr,
+  _In_ socklen_t SockaddrLength,
+  _Out_writes_opt_(NodeBufferSize) PWCHAR pNodeBuffer,
+  _In_ DWORD NodeBufferSize,
+  _Out_writes_opt_(ServiceBufferSize) PWCHAR pServiceBuffer,
+  _In_ DWORD ServiceBufferSize,
+  _In_ INT Flags);
 
 #define GetNameInfoA getnameinfo
 
@@ -403,23 +403,23 @@ GetNameInfoW(
 
 typedef int
 (WSAAPI *LPFN_GETNAMEINFO)(
-  IN const SOCKADDR *pSockaddr,
-  IN socklen_t SockaddrLength,
-  OUT PCHAR pNodeBuffer,
-  IN DWORD NodeBufferSize,
-  OUT PCHAR pServiceBuffer OPTIONAL,
-  IN DWORD ServiceBufferSize,
-  IN INT Flags);
+  _In_reads_bytes_(SockaddrLength) const SOCKADDR *pSockaddr,
+  _In_ socklen_t SockaddrLength,
+  _Out_writes_opt_(NodeBufferSize) PCHAR pNodeBuffer,
+  _In_ DWORD NodeBufferSize,
+  _Out_writes_opt_(ServiceBufferSize) PCHAR pServiceBuffer,
+  _In_ DWORD ServiceBufferSize,
+  _In_ INT Flags);
 
 typedef INT
 (WSAAPI *LPFN_GETNAMEINFOW)(
-  IN const SOCKADDR *pSockaddr,
-  IN socklen_t SockaddrLength,
-  OUT PWCHAR pNodeBuffer,
-  IN DWORD NodeBufferSize,
-  OUT PWCHAR pServiceBuffer OPTIONAL,
-  IN DWORD ServiceBufferSize,
-  IN INT Flags);
+  _In_reads_bytes_(SockaddrLength) const SOCKADDR *pSockaddr,
+  _In_ socklen_t SockaddrLength,
+  _Out_writes_opt_(NodeBufferSize) PWCHAR pNodeBuffer,
+  _In_ DWORD NodeBufferSize,
+  _Out_writes_opt_(ServiceBufferSize) PWCHAR pServiceBuffer,
+  _In_ DWORD ServiceBufferSize,
+  _In_ INT Flags);
 
 #define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
 
@@ -436,32 +436,32 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 inet_pton(
-  IN INT Family,
-  IN PCSTR pszAddrString,
-  OUT PVOID pAddrBuf);
+  _In_ INT Family,
+  _In_ PCSTR pszAddrString,
+  _Out_writes_bytes_(sizeof(IN6_ADDR)) PVOID pAddrBuf);
 
 INT
 WSAAPI
 InetPtonW(
-  IN INT Family,
-  IN PCWSTR pszAddrString,
-  OUT PVOID pAddrBuf);
+  _In_ INT Family,
+  _In_ PCWSTR pszAddrString,
+  _Out_writes_bytes_(sizeof(IN6_ADDR)) PVOID pAddrBuf);
 
 PCSTR
 WSAAPI
 inet_ntop(
-  IN INT Family,
-  IN PVOID pAddr,
-  OUT PSTR pStringBuf,
-  IN size_t StringBufSize);
+  _In_ INT Family,
+  _In_ PVOID pAddr,
+  _Out_writes_(StringBufSize) PSTR pStringBuf,
+  _In_ size_t StringBufSize);
 
 PCWSTR
 WSAAPI
 InetNtopW(
-  IN INT Family,
-  IN PVOID pAddr,
-  OUT PWSTR pStringBuf,
-  IN size_t StringBufSize);
+  _In_ INT Family,
+  _In_ PVOID pAddr,
+  _Out_writes_(StringBufSize) PWSTR pStringBuf,
+  _In_ size_t StringBufSize);
 
 #define InetPtonA inet_pton
 #define InetNtopA inet_ntop
@@ -478,29 +478,29 @@ InetNtopW(
 
 typedef INT
 (WSAAPI *LPFN_INET_PTONA)(
-  IN INT Family,
-  IN PCSTR pszAddrString,
-  OUT PVOID pAddrBuf);
+  _In_ INT Family,
+  _In_ PCSTR pszAddrString,
+  _Out_writes_bytes_(sizeof(IN6_ADDR)) PVOID pAddrBuf);
 
 typedef INT
 (WSAAPI *LPFN_INET_PTONW)(
-  IN INT Family,
-  IN PCWSTR pszAddrString,
-  OUT PVOID pAddrBuf);
+  _In_ INT Family,
+  _In_ PCWSTR pszAddrString,
+  _Out_writes_bytes_(sizeof(IN6_ADDR)) PVOID pAddrBuf);
 
 typedef PCSTR
 (WSAAPI *LPFN_INET_NTOPA)(
-  IN INT Family,
-  IN PVOID pAddr,
-  OUT PSTR pStringBuf,
-  IN size_t StringBufSize);
+  _In_ INT Family,
+  _In_ PVOID pAddr,
+  _Out_writes_(StringBufSize) PSTR pStringBuf,
+  _In_ size_t StringBufSize);
 
 typedef PCWSTR
 (WSAAPI *LPFN_INET_NTOPW)(
-  IN INT Family,
-  IN PVOID pAddr,
-  OUT PWSTR pStringBuf,
-  IN size_t StringBufSize);
+  _In_ INT Family,
+  _In_ PVOID pAddr,
+  _Out_writes_(StringBufSize) PWSTR pStringBuf,
+  _In_ size_t StringBufSize);
 
 #ifdef UNICODE
 #define LPFN_INET_PTON LPFN_INET_PTONW
@@ -526,7 +526,7 @@ typedef PCWSTR
 static __inline
 char *
 gai_strerrorA(
-  IN int ecode)
+  _In_ int ecode)
 {
   static char buff[GAI_STRERROR_BUFFER_SIZE + 1];
 
@@ -546,7 +546,7 @@ gai_strerrorA(
 static __inline
 WCHAR *
 gai_strerrorW(
-  IN int ecode)
+  _In_ int ecode)
 {
   static WCHAR buff[GAI_STRERROR_BUFFER_SIZE + 1];
 
@@ -568,12 +568,12 @@ gai_strerrorW(
 WS2TCPIP_INLINE
 int
 setipv4sourcefilter(
-  IN SOCKET Socket,
-  IN IN_ADDR Interface,
-  IN IN_ADDR Group,
-  IN MULTICAST_MODE_TYPE FilterMode,
-  IN ULONG SourceCount,
-  IN CONST IN_ADDR *SourceList)
+  _In_ SOCKET Socket,
+  _In_ IN_ADDR Interface,
+  _In_ IN_ADDR Group,
+  _In_ MULTICAST_MODE_TYPE FilterMode,
+  _In_ ULONG SourceCount,
+  _In_reads_(SourceCount) CONST IN_ADDR *SourceList)
 {
   int Error;
   DWORD Size, Returned;
@@ -609,15 +609,16 @@ setipv4sourcefilter(
   return Error;
 }
 
+_Success_(return == 0)
 WS2TCPIP_INLINE
 int
 getipv4sourcefilter(
-  IN SOCKET Socket,
-  IN IN_ADDR Interface,
-  IN IN_ADDR Group,
-  OUT MULTICAST_MODE_TYPE *FilterMode,
-  IN OUT ULONG *SourceCount,
-  OUT IN_ADDR *SourceList)
+  _In_ SOCKET Socket,
+  _In_ IN_ADDR Interface,
+  _In_ IN_ADDR Group,
+  _Out_ MULTICAST_MODE_TYPE *FilterMode,
+  _Inout_ ULONG *SourceCount,
+  _Out_writes_(*SourceCount) IN_ADDR *SourceList)
 {
   int Error;
   DWORD Size, Returned;
@@ -662,13 +663,13 @@ getipv4sourcefilter(
 WS2TCPIP_INLINE
 int
 setsourcefilter(
-  IN SOCKET Socket,
-  IN ULONG Interface,
-  IN CONST SOCKADDR *Group,
-  IN int GroupLength,
-  IN MULTICAST_MODE_TYPE FilterMode,
-  IN ULONG SourceCount,
-  IN CONST SOCKADDR_STORAGE *SourceList)
+  _In_ SOCKET Socket,
+  _In_ ULONG Interface,
+  _In_ CONST SOCKADDR *Group,
+  _In_ int GroupLength,
+  _In_ MULTICAST_MODE_TYPE FilterMode,
+  _In_ ULONG SourceCount,
+  _In_reads_(SourceCount) CONST SOCKADDR_STORAGE *SourceList)
 {
   int Error;
   DWORD Size, Returned;
@@ -701,16 +702,17 @@ setsourcefilter(
   return Error;
 }
 
+_Success_(return == 0)
 WS2TCPIP_INLINE
 int
 getsourcefilter(
-  IN SOCKET Socket,
-  IN ULONG Interface,
-  IN CONST SOCKADDR *Group,
-  IN int GroupLength,
-  OUT MULTICAST_MODE_TYPE *FilterMode,
-  IN OUT ULONG *SourceCount,
-  OUT SOCKADDR_STORAGE *SourceList)
+  _In_ SOCKET Socket,
+  _In_ ULONG Interface,
+  _In_ CONST SOCKADDR *Group,
+  _In_ int GroupLength,
+  _Out_ MULTICAST_MODE_TYPE *FilterMode,
+  _Inout_ ULONG *SourceCount,
+  _Out_writes_(*SourceCount) SOCKADDR_STORAGE *SourceList)
 {
   int Error;
   DWORD Size, Returned;
@@ -753,8 +755,8 @@ getsourcefilter(
 WS2TCPIP_INLINE
 int
 idealsendbacklogquery(
-  IN SOCKET s,
-  OUT ULONG *pISB)
+  _In_ SOCKET s,
+  _Out_ ULONG *pISB)
 {
   DWORD bytes;
 
@@ -765,9 +767,9 @@ idealsendbacklogquery(
 WS2TCPIP_INLINE
 int
 idealsendbacklognotify(
-  IN SOCKET s,
-  IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL)
+  _In_ SOCKET s,
+  _In_opt_ LPWSAOVERLAPPED lpOverlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
 {
   DWORD bytes;
 
@@ -786,51 +788,51 @@ WINSOCK_API_LINKAGE
 INT
 WSAAPI
 WSASetSocketSecurity(
-  IN SOCKET Socket,
-  IN const SOCKET_SECURITY_SETTINGS *SecuritySettings OPTIONAL,
-  IN ULONG SecuritySettingsLen,
-  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+  _In_ SOCKET Socket,
+  _In_reads_bytes_opt_(SecuritySettingsLen) const SOCKET_SECURITY_SETTINGS *SecuritySettings,
+  _In_ ULONG SecuritySettingsLen,
+  _In_opt_ LPWSAOVERLAPPED Overlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 WSAQuerySocketSecurity(
-  IN SOCKET Socket,
-  IN const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate OPTIONAL,
-  IN ULONG SecurityQueryTemplateLen,
-  OUT SOCKET_SECURITY_QUERY_INFO* SecurityQueryInfo OPTIONAL,
-  IN OUT ULONG *SecurityQueryInfoLen,
-  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+  _In_ SOCKET Socket,
+  _In_reads_bytes_opt_(SecurityQueryTemplateLen) const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate,
+  _In_ ULONG SecurityQueryTemplateLen,
+  _Out_writes_bytes_to_opt_(*SecurityQueryInfoLen, *SecurityQueryInfoLen) SOCKET_SECURITY_QUERY_INFO* SecurityQueryInfo,
+  _Inout_ ULONG *SecurityQueryInfoLen,
+  _In_opt_ LPWSAOVERLAPPED Overlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 WSASetSocketPeerTargetName(
-  IN SOCKET Socket,
-  IN const SOCKET_PEER_TARGET_NAME *PeerTargetName,
-  IN ULONG PeerTargetNameLen,
-  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+  _In_ SOCKET Socket,
+  _In_reads_bytes_(PeerTargetNameLen) const SOCKET_PEER_TARGET_NAME *PeerTargetName,
+  _In_ ULONG PeerTargetNameLen,
+  _In_opt_ LPWSAOVERLAPPED Overlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 WSADeleteSocketPeerTargetName(
-  IN SOCKET Socket,
-  IN const struct sockaddr *PeerAddr,
-  IN ULONG PeerAddrLen,
-  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
-  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+  _In_ SOCKET Socket,
+  _In_reads_bytes_(PeerAddrLen) const struct sockaddr *PeerAddr,
+  _In_ ULONG PeerAddrLen,
+  _In_opt_ LPWSAOVERLAPPED Overlapped,
+  _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine);
 
 WINSOCK_API_LINKAGE
 INT
 WSAAPI
 WSAImpersonateSocketPeer(
-  IN SOCKET Socket,
-  IN const struct sockaddr *PeerAddr OPTIONAL,
-  IN ULONG PeerAddrLen);
+  _In_ SOCKET Socket,
+  _In_reads_bytes_opt_(PeerAddrLen) const struct sockaddr *PeerAddr,
+  _In_ ULONG PeerAddrLen);
 
 WINSOCK_API_LINKAGE
 INT
index ef62f54..9310ea4 100644 (file)
@@ -71,7 +71,8 @@ NTAPI
 CpGetByte(
     IN  PCPPORT Port,
     OUT PUCHAR  Byte,
-    IN  BOOLEAN Wait
+    IN  BOOLEAN Wait,
+    IN BOOLEAN Poll
 );
 
 VOID
index 8037a7c..a1d652e 100644 (file)
@@ -7,9 +7,12 @@ list(APPEND UNICODE_SOURCE
     neteventmsg.mc
     ntiologc.mc
     ntstatus.mc
-    pciclass.mc
+    pciclass.mc)
+
+list(APPEND UNICODE_SOURCE_REALLY
     sacmsg.mc)
 
 add_message_headers(ANSI ${ANSI_SOURCE})
 # FIXME: this needs testing before switching to unicode
 add_message_headers(ANSI ${UNICODE_SOURCE})
+add_message_headers(UNICODE ${UNICODE_SOURCE_REALLY})
index 4d3052c..34333c4 100644 (file)
@@ -1,7 +1,12 @@
 MessageId=1
 SymbolicName=SAC_INIT_STATUS
 Language=English
-Computer is booting, SAC started and initialized.\n\nUse the \"ch -?\" command for information about using channels.\nUse the \"?\" command for general help.
+
+Computer is booting, SAC started and initialized.
+
+Use the "ch -?" command for information about using channels.
+Use the "?" command for general help.
+
 .
 
 MessageId=2
@@ -25,7 +30,8 @@ The SAC is unavailable, it was directly unloaded.
 MessageId=5
 SymbolicName=SACDRV_5
 Language=English
-The SAC will become unavailable soon.  The computer is shutting down.\n
+The SAC will become unavailable soon.  The computer is shutting down.
+
 .
 
 MessageId=6
@@ -295,7 +301,9 @@ SAC failed to retrieve the task list.
 MessageId=69
 SymbolicName=SACDRV_69
 Language=English
-memory: %%4ld kb  uptime:%%3ld %%2ld:%%02ld:%%02ld.%%03ld\n\n
+memory: %%4ld kb  uptime:%%3ld %%2ld:%%02ld:%%02ld.%%03ld
+
+
 .
 
 MessageId=70
@@ -319,7 +327,8 @@ Language=English
 MessageId=73
 SymbolicName=SACDRV_73
 Language=English
-\n Memory:%%7ldK Avail:%%7ldK  TotalWs:%%7ldK InRam Kernel:%%5ldK P:%%5ldK
+
+ Memory:%%7ldK Avail:%%7ldK  TotalWs:%%7ldK InRam Kernel:%%5ldK P:%%5ldK
 .
 
 MessageId=74
@@ -421,7 +430,8 @@ That process has been killed and is being cleaned up by the system.
 MessageId=90
 SymbolicName=SACDRV_90
 Language=English
-A duplicate process id is being cleaned up by the system.  Try the \ncommand again in a few seconds.
+A duplicate process id is being cleaned up by the system.  Try the 
+command again in a few seconds.
 .
 
 MessageId=92
@@ -461,7 +471,7 @@ Language=English
 .
 
 MessageId=98
-SymbolicName=SACDRV_98
+SymbolicName=SAC_NO_DATA_MSG
 Language=English
 None%0
 .
@@ -473,25 +483,25 @@ Language=English
 .
 
 MessageId=100
-SymbolicName=SACDRV_100
+SymbolicName=SAC_DATACENTER_SUITE_MSG
 Language=English
 Windows Server 2003 Datacenter Edition%0
 .
 
 MessageId=101
-SymbolicName=SACDRV_101
+SymbolicName=SAC_EMBEDDED_SUITE_MSG
 Language=English
 Windows Server 2003 Embedded%0
 .
 
 MessageId=102
-SymbolicName=SACDRV_102
+SymbolicName=SAC_ENTERPRISE_SUITE_MSG
 Language=English
 Windows Server 2003 Enterprise Edition%0
 .
 
 MessageId=103
-SymbolicName=SACDRV_103
+SymbolicName=SAC_NO_SUITE_MSG
 Language=English
 Windows Server 2003%0
 .
@@ -523,31 +533,46 @@ Error: Could not find a channel with that name.
 MessageId=108
 SymbolicName=SACDRV_108
 Language=English
-Channel List\n                       \n(Use \"ch -?\" for information on using channels)\n\n# Status  Channel Name 
+Channel List
+
+(Use "ch -?" for information on using channels)
+
+# Status  Channel Name 
 .
 
 MessageId=109
 SymbolicName=SACDRV_109
 Language=English
-EVENT:   A new channel has been created.  Use \"ch -?\" for channel help.\nChannel: %%s
+EVENT:   A new channel has been created.  Use "ch -?" for channel help.
+Channel: %%s
 .
 
 MessageId=110
 SymbolicName=SACDRV_110
 Language=English
-EVENT:   A channel has been closed.\nChannel: %%s
+EVENT:   A channel has been closed.
+Channel: %%s
 .
 
 MessageId=111
 SymbolicName=SACDRV_111
 Language=English
-Name:                  %%s\nDescription:           %%s\nType:                  %%s\nChannel GUID:          %%08lx-%%04x-%%04x-%%02x%%02x-%%02x%%02x%%02x%%02x%%02x%%02x\nApplication Type GUID: %%08lx-%%04x-%%04x-%%02x%%02x-%%02x%%02x%%02x%%02x%%02x%%02x\n\nPress <esc><tab> for next channel.\nPress <esc><tab>0 to return to the SAC channel.\nUse any other key to view this channel.\n
+Name:                  %%s
+Description:           %%s
+Type:                  %%s
+Channel GUID:          %%08lx-%%04x-%%04x-%%02x%%02x-%%02x%%02x%%02x%%02x%%02x%%02x
+Application Type GUID: %%08lx-%%04x-%%04x-%%02x%%02x-%%02x%%02x%%02x%%02x%%02x%%02x
+
+Press <esc><tab> for next channel.
+Press <esc><tab>0 to return to the SAC channel.
+Use any other key to view this channel.
+
 .
 
 MessageId=112
 SymbolicName=SACDRV_112
 Language=English
-ch                   Channel management commands.  Use ch -? for more help.    
+ch                   Channel management commands.  Use ch -? for more help.
 .
 
 MessageId=113
@@ -571,7 +596,10 @@ SAC preparing to shutdown the system.
 MessageId=116
 SymbolicName=SACDRV_116
 Language=English
-Error! Failed to remove channel! \n\nPlease contact your system administrator.\n
+Error! Failed to remove channel! 
+
+Please contact your system administrator.
+
 .
 
 MessageId=119
@@ -583,7 +611,9 @@ cmd                  Create a Command Prompt channel.
 MessageId=120
 SymbolicName=SACDRV_120
 Language=English
-Timeout: Unable to launch a Command Prompt.  The service responsible for \n         launching Command Prompt channels has timed out.  This may be \n         because the service is malfunctioning or is unresponsive.  
+Timeout: Unable to launch a Command Prompt.  The service responsible for
+         launching Command Prompt channels has timed out.  This may be
+         because the service is malfunctioning or is unresponsive.
 .
 
 MessageId=121
@@ -601,7 +631,10 @@ Error: The SAC Command Console session failed to be created.
 MessageId=131
 SymbolicName=SACDRV_131
 Language=English
-Error: Unable to launch a Command Prompt.  The service responsible for launching\n       Command Prompt channels has not yet registered.  This may be because the\n       service is not yet started, is disabled by the administrator, is\n       malfunctioning or is unresponsive.  
+Error: Unable to launch a Command Prompt.  The service responsible for launching
+       Command Prompt channels has not yet registered.  This may be because the
+       service is not yet started, is disabled by the administrator, is
+       malfunctioning or is unresponsive.  
 .
 
 MessageId=132
@@ -619,19 +652,39 @@ EVENT: The CMD command is unavailable.
 MessageId=134
 SymbolicName=SACDRV_134
 Language=English
-EVENT:   An attempt was made to close a channel but failed.\nChannel: %%s
+EVENT:   An attempt was made to close a channel but failed.
+Channel: %%s
 .
 
 MessageId=135
 SymbolicName=SACDRV_135
 Language=English
-EVENT:   An attempt to close a channel failed because it is already closed.\nChannel: %%s
+EVENT:   An attempt to close a channel failed because it is already closed.
+Channel: %%s
 .
 
 MessageId=136
 SymbolicName=SACDRV_136
 Language=English
-Channel management commands:\n\nch                   List all channels.\n\nStatus Legend: (AB)\nA: Channel operational status\n    'A' = Channel is active.\n    'I' = Channel is inactive.\nB: Channel Type\n    'V' = VT-UTF8 emulation.\n    'R' = Raw - no emulation.\n\nch -si <#>           Switch to a channel by its number.\nch -sn <name>        Switch to a channel by its name.\nch -ci <#>           Close a channel by its number.\nch -cn <name>        Close a channel by its name.\n\nPress <esc><tab> to select a channel.\nPress <esc><tab>0 to return to the SAC channel.
+Channel management commands:
+
+ch                   List all channels.
+
+Status Legend: (AB)
+A: Channel operational status
+    'A' = Channel is active.
+    'I' = Channel is inactive.
+B: Channel Type
+    'V' = VT-UTF8 emulation.
+    'R' = Raw - no emulation.
+
+ch -si <#>           Switch to a channel by its number.
+ch -sn <name>        Switch to a channel by its name.
+ch -ci <#>           Close a channel by its number.
+ch -cn <name>        Close a channel by its name.
+
+Press <esc><tab> to select a channel.
+Press <esc><tab>0 to return to the SAC channel.
 .
 
 MessageId=137
@@ -695,7 +748,7 @@ The specified gateway IP address is invalid.
 .
 
 MessageId=153
-SymbolicName=SACDRV_153
+SymbolicName=SAC_UNINITIALIZED_MSG
 Language=English
 not yet initialized%0
 .
@@ -703,5 +756,5 @@ not yet initialized%0
 MessageId=154
 SymbolicName=SACDRV_154
 Language=English
-The maximum number of channels has been reached.  
+The maximum number of channels has been reached.
 .
index b750aff..4d0be5f 100644 (file)
@@ -32,13 +32,6 @@ typedef enum _CSRSRV_API_NUMBER
 } CSRSRV_API_NUMBER, *PCSRSRV_API_NUMBER;
 
 
-/*
-typedef struct _CSR_API_NUMBER
-{
-    WORD Index;
-    WORD Subsystem;
-} CSR_API_NUMBER, *PCSR_API_NUMBER;
-*/
 typedef ULONG CSR_API_NUMBER;
 
 #define CSR_CREATE_API_NUMBER(ServerId, ApiId) \
@@ -51,7 +44,7 @@ typedef ULONG CSR_API_NUMBER;
     (ULONG)((ULONG)(ApiNumber) & 0xFFFF)
 
 
-typedef struct _CSR_CONNECTION_INFO
+typedef struct _CSR_API_CONNECTINFO
 {
     ULONG Version;
     ULONG Unknown;
@@ -62,10 +55,12 @@ typedef struct _CSR_CONNECTION_INFO
     ULONG DebugFlags;
     ULONG Unknown2[3];
     HANDLE ProcessId;
-} CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO;
+} CSR_API_CONNECTINFO, *PCSR_API_CONNECTINFO;
+
+#define CSRSRV_VERSION 0x10000
 
 // We must have a size at most equal to the maximum acceptable LPC data size.
-C_ASSERT(sizeof(CSR_CONNECTION_INFO) <= LPC_MAX_DATA_LENGTH);
+C_ASSERT(sizeof(CSR_API_CONNECTINFO) <= LPC_MAX_DATA_LENGTH);
 
 
 typedef struct _CSR_IDENTIFY_ALTERTABLE_THREAD
@@ -107,7 +102,7 @@ typedef struct _CSR_API_MESSAGE
     PORT_MESSAGE Header;
     union
     {
-        CSR_CONNECTION_INFO ConnectionInfo; // Uniquely used in CSRSRV for internal signaling (opening a new connection).
+        CSR_API_CONNECTINFO ConnectionInfo; // Uniquely used in CSRSRV for internal signaling (opening a new connection).
         struct
         {
             PCSR_CAPTURE_BUFFER CsrCaptureData;
index 8875744..2b77d74 100644 (file)
@@ -52,6 +52,21 @@ typedef enum _BASESRV_API_NUMBER
     BasepMaxApiNumber
 } BASESRV_API_NUMBER, *PBASESRV_API_NUMBER;
 
+
+typedef struct _BASESRV_API_CONNECTINFO
+{
+    ULONG  ExpectedVersion;
+    HANDLE DefaultObjectDirectory;
+    ULONG  WindowsVersion;
+    ULONG  CurrentVersion;
+    ULONG  DebugFlags;
+    WCHAR  WindowsDirectory[MAX_PATH];
+    WCHAR  WindowsSystemDirectory[MAX_PATH];
+} BASESRV_API_CONNECTINFO, *PBASESRV_API_CONNECTINFO;
+
+#define BASESRV_VERSION 0x10000
+
+
 typedef struct _BASE_SXS_CREATEPROCESS_MSG
 {
     ULONG Flags;
@@ -96,38 +111,38 @@ typedef struct
 
 typedef struct
 {
-    UINT uExitCode;
-} BASE_EXIT_PROCESS, *PBASE_EXIT_PROCESS;
+    UINT UniqueID;
+} BASE_GET_TEMP_FILE, *PBASE_GET_TEMP_FILE;
 
 typedef struct
 {
-    UINT UniqueID;
-} BASE_GET_TEMP_FILE, *PBASE_GET_TEMP_FILE;
+    UINT uExitCode;
+} BASE_EXIT_PROCESS, *PBASE_EXIT_PROCESS;
 
 typedef struct
 {
-    ULONG iTask;
+    ULONG  iTask;
     HANDLE ConsoleHandle;
-    ULONG BinaryType;
+    ULONG  BinaryType;
     HANDLE WaitObjectForParent;
     HANDLE StdIn;
     HANDLE StdOut;
     HANDLE StdErr;
-    ULONG CodePage;
-    ULONG dwCreationFlags;
-    PCHAR CmdLine;
-    PCHAR appName;
-    PCHAR PifFile;
-    PCHAR CurDirectory;
-    PCHAR Env;
-    ULONG EnvLen;
-    PVOID StartupInfo;
-    PCHAR Desktop;
-    ULONG DesktopLen;
-    PCHAR Title;
-    ULONG TitleLen;
-    PCHAR Reserved;
-    ULONG ReservedLen;
+    ULONG  CodePage;
+    ULONG  dwCreationFlags;
+    PCHAR  CmdLine;
+    PCHAR  appName;
+    PCHAR  PifFile;
+    PCHAR  CurDirectory;
+    PCHAR  Env;
+    ULONG  EnvLen;
+    LPSTARTUPINFOA StartupInfo;
+    PCHAR  Desktop;
+    ULONG  DesktopLen;
+    PCHAR  Title;
+    ULONG  TitleLen;
+    PCHAR  Reserved;
+    ULONG  ReservedLen;
     USHORT CmdLen;
     USHORT AppLen;
     USHORT PifLen;
@@ -138,8 +153,8 @@ typedef struct
 
 typedef struct
 {
-    ULONG iTask;
-    ULONG BinaryType;
+    ULONG  iTask;
+    ULONG  BinaryType;
     HANDLE ConsoleHandle;
     HANDLE VDMProcessHandle;
     HANDLE WaitObjectForParent;
@@ -147,24 +162,87 @@ typedef struct
     USHORT VDMCreationState;
 } BASE_UPDATE_VDM_ENTRY, *PBASE_UPDATE_VDM_ENTRY;
 
+typedef struct
+{
+    ULONG  iTask;
+    HANDLE ConsoleHandle;
+    HANDLE WaitObjectForVDM;
+    HANDLE StdIn;
+    HANDLE StdOut;
+    HANDLE StdErr;
+    ULONG  CodePage;
+    ULONG  dwCreationFlags;
+    ULONG  ExitCode;
+    PCHAR  CmdLine;
+    PCHAR  AppName;
+    PCHAR  PifFile;
+    PCHAR  CurDirectory;
+    PCHAR  Env;
+    ULONG  EnvLen;
+    LPSTARTUPINFOA StartupInfo;
+    PCHAR  Desktop;
+    ULONG  DesktopLen;
+    PCHAR  Title;
+    ULONG  TitleLen;
+    PCHAR  Reserved;
+    ULONG  ReservedLen;
+    USHORT CurrentDrive;
+    USHORT CmdLen;
+    USHORT AppLen;
+    USHORT PifLen;
+    USHORT CurDirectoryLen;
+    USHORT VDMState;
+    ULONG  fComingFromBat;
+} BASE_GET_NEXT_VDM_COMMAND, *PBASE_GET_NEXT_VDM_COMMAND;
+
+typedef struct
+{
+    HANDLE ConsoleHandle;
+    ULONG  iWowTask;
+    HANDLE WaitObjectForVDM;
+} BASE_EXIT_VDM, *PBASE_EXIT_VDM;
+
+typedef struct
+{
+    ULONG FirstVDM;
+} BASE_IS_FIRST_VDM, *PBASE_IS_FIRST_VDM;
+
 typedef struct
 {
     HANDLE ConsoleHandle;
     HANDLE hParent;
-    ULONG ExitCode;
+    ULONG  ExitCode;
 } BASE_GET_VDM_EXIT_CODE, *PBASE_GET_VDM_EXIT_CODE;
 
 typedef struct
 {
-    DWORD Level;
-    DWORD Flags;
-} BASE_SET_PROCESS_SHUTDOWN_PARAMS, *PBASE_SET_PROCESS_SHUTDOWN_PARAMS;
+    HANDLE ConsoleHandle;
+    ULONG  fIncDec;
+} BASE_SET_REENTER_COUNT, *PBASE_SET_REENTER_COUNT;
+
+typedef struct
+{
+    ULONG ShutdownLevel;
+    ULONG ShutdownFlags;
+} BASE_GETSET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS;
 
 typedef struct
 {
-    DWORD Level;
-    DWORD Flags;
-} BASE_GET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GET_PROCESS_SHUTDOWN_PARAMS;
+    HANDLE ConsoleHandle;
+    PCHAR  lpszzCurDirs;
+    ULONG  cchCurDirs;
+} BASE_GETSET_VDM_CURDIRS, *PBASE_GETSET_VDM_CURDIRS;
+
+typedef struct
+{
+    HANDLE ConsoleHandle;
+    ULONG  fBeginEnd;
+} BASE_BAT_NOTIFICATION, *PBASE_BAT_NOTIFICATION;
+
+typedef struct
+{
+    HANDLE hwndWowExec;
+} BASE_REGISTER_WOWEXEC, *PBASE_REGISTER_WOWEXEC;
 
 typedef struct
 {
@@ -173,9 +251,14 @@ typedef struct
 
 typedef struct
 {
+    UNICODE_STRING IniFileName;
+} BASE_REFRESH_INIFILE_MAPPING, *PBASE_REFRESH_INIFILE_MAPPING;
+
+typedef struct
+{
+    ULONG Flags;
     UNICODE_STRING DeviceName;
-    UNICODE_STRING TargetName;
-    DWORD dwFlags;
+    UNICODE_STRING TargetPath;
 } BASE_DEFINE_DOS_DEVICE, *PBASE_DEFINE_DOS_DEVICE;
 
 typedef struct _BASE_API_MESSAGE
@@ -190,14 +273,21 @@ typedef struct _BASE_API_MESSAGE
     {
         BASE_CREATE_PROCESS CreateProcessRequest;
         BASE_CREATE_THREAD CreateThreadRequest;
+        BASE_GET_TEMP_FILE GetTempFileRequest;
         BASE_EXIT_PROCESS ExitProcessRequest;
-        BASE_GET_TEMP_FILE GetTempFile;
-        BASE_CHECK_VDM CheckVdm;
-        BASE_UPDATE_VDM_ENTRY UpdateVdmEntry;
-        BASE_GET_VDM_EXIT_CODE GetVdmExitCode;
-        BASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest;
-        BASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest;
+        BASE_CHECK_VDM CheckVDMRequest;
+        BASE_UPDATE_VDM_ENTRY UpdateVDMEntryRequest;
+        BASE_GET_NEXT_VDM_COMMAND GetNextVDMCommandRequest;
+        BASE_EXIT_VDM ExitVDMRequest;
+        BASE_IS_FIRST_VDM IsFirstVDMRequest;
+        BASE_GET_VDM_EXIT_CODE GetVDMExitCodeRequest;
+        BASE_SET_REENTER_COUNT SetReenterCountRequest;
+        BASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest;
+        BASE_GETSET_VDM_CURDIRS VDMCurrentDirsRequest;
+        BASE_BAT_NOTIFICATION BatNotificationRequest;
+        BASE_REGISTER_WOWEXEC RegisterWowExecRequest;
         BASE_SOUND_SENTRY SoundSentryRequest;
+        BASE_REFRESH_INIFILE_MAPPING RefreshIniFileMappingRequest;
         BASE_DEFINE_DOS_DEVICE DefineDosDeviceRequest;
     } Data;
 } BASE_API_MESSAGE, *PBASE_API_MESSAGE;
index 0867163..bebd8ec 100644 (file)
@@ -126,7 +126,7 @@ typedef struct _CONSOLE_START_INFO
     INT   IconIndex;                    // Index of the icon
 } CONSOLE_START_INFO, *PCONSOLE_START_INFO;
 
-typedef struct _CONSOLE_CONNECTION_INFO
+typedef struct _CONSRV_API_CONNECTINFO
 {
     BOOL ConsoleNeeded; // Used for GUI apps only.
 
@@ -140,7 +140,7 @@ typedef struct _CONSOLE_CONNECTION_INFO
     HANDLE InputWaitHandle;
     LPTHREAD_START_ROUTINE CtrlDispatcher;
     LPTHREAD_START_ROUTINE PropDispatcher;
-} CONSOLE_CONNECTION_INFO, *PCONSOLE_CONNECTION_INFO;
+} CONSRV_API_CONNECTINFO, *PCONSRV_API_CONNECTINFO;
 
 
 typedef struct
index 8e493dd..4cad5b5 100644 (file)
@@ -255,7 +255,8 @@ USHORT
 NTAPI
 CpGetByte(IN  PCPPORT Port,
           OUT PUCHAR  Byte,
-          IN  BOOLEAN Wait)
+          IN  BOOLEAN Wait,
+          IN BOOLEAN Poll)
 {
     UCHAR Lsr;
     ULONG LimitCount = Wait ? TIMEOUT_COUNT : 1;
@@ -277,6 +278,9 @@ CpGetByte(IN  PCPPORT Port,
                 return CP_GET_ERROR;
             }
 
+            /* If only polling was requested by caller, return now */
+            if (Poll) return CP_GET_SUCCESS;
+
             /* Otherwise read the byte and return it */
             *Byte = READ_PORT_UCHAR(Port->Address + RECEIVE_BUFFER_REGISTER);
 
index 0dd6037..e74cb8e 100644 (file)
@@ -42,7 +42,7 @@ RtlpMapFile(PUNICODE_STRING ImageFileName,
                         FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE);
     if (!NT_SUCCESS(Status))
     {
-        DPRINT1("Failed to read image file from disk\n");
+        DPRINT1("Failed to read image file from disk, Status = 0x%08X\n", Status);
         return Status;
     }
 
@@ -56,7 +56,7 @@ RtlpMapFile(PUNICODE_STRING ImageFileName,
                              hFile);
     if (!NT_SUCCESS(Status))
     {
-        DPRINT1("Failed to create section for image file\n");
+        DPRINT1("Failed to create section for image file, Status = 0x%08X\n", Status);
     }
 
     ZwClose(hFile);
index f91b32c..0eddf85 100644 (file)
@@ -17,118 +17,173 @@ PHEADLESS_GLOBALS HeadlessGlobals;
 
 /* FUNCTIONS *****************************************************************/
 
+FORCEINLINE
+KIRQL
+HdlspAcquireGlobalLock(VOID)
+{
+    KIRQL OldIrql;
+
+    /* Don't acquire the lock if we are bugchecking */
+    if (!HeadlessGlobals->InBugCheck)
+    {
+        KeAcquireSpinLock(&HeadlessGlobals->SpinLock, &OldIrql);
+    }
+    else
+    {
+        OldIrql = 0xFF;
+    }
+
+    return OldIrql;
+}
+
+FORCEINLINE
+VOID
+HdlspReleaselobalLock(IN KIRQL OldIrql)
+{
+    /* Only release the lock if we aren't bugchecking */
+    if (OldIrql != 0xFF)
+    {
+        KeReleaseSpinLock(&HeadlessGlobals->SpinLock, OldIrql);
+    }
+    else
+    {
+        ASSERT(HeadlessGlobals->InBugCheck == TRUE);
+    }
+}
+
 VOID
 NTAPI
-HdlspSendStringAtBaud(
-       IN PUCHAR String
-       )
+HdlspSendStringAtBaud(IN PUCHAR String)
 {
-       /* Send every byte */
-       while (*String++ != ANSI_NULL)
-       {
-               InbvPortPutByte(HeadlessGlobals->TerminalPort, *String);
-       }
+    /* Send every byte */
+    while (*String++ != ANSI_NULL)
+    {
+        InbvPortPutByte(HeadlessGlobals->TerminalPort, *String);
+    }
 }
 
 NTSTATUS
 NTAPI
-HdlspEnableTerminal(
-       IN BOOLEAN Enable
-       )
+HdlspEnableTerminal(IN BOOLEAN Enable)
 {
-       /* Enable if requested, as long as this isn't a PCI serial port crashing */
-       if ((Enable) &&
-               !(HeadlessGlobals->TerminalEnabled) &&
-               !((HeadlessGlobals->IsMMIODevice) && (HeadlessGlobals->InBugCheck)))
-       {
-               /* Initialize the COM port with cportlib */
-               HeadlessGlobals->TerminalEnabled = InbvPortInitialize(
-                       HeadlessGlobals->TerminalBaudRate,
-                       HeadlessGlobals->TerminalPortNumber,
-                       HeadlessGlobals->TerminalPortAddress,
-                       &HeadlessGlobals->TerminalPort,
-                       HeadlessGlobals->IsMMIODevice);
-        if (!HeadlessGlobals->TerminalEnabled) return STATUS_UNSUCCESSFUL;
-
-               /* Cleanup the screen and reset the cursor */
-               HdlspSendStringAtBaud((PUCHAR)"\x1B[2J");
-               HdlspSendStringAtBaud((PUCHAR)"\x1B[H");
-
-               /* Enable FIFO */
-               InbvPortEnableFifo(HeadlessGlobals->TerminalPort, TRUE);
-       }
-       else if (!Enable)
-       {
-               /* Specific case when headless is being disabled */
-               InbvPortTerminate(HeadlessGlobals->TerminalPort);
-               HeadlessGlobals->TerminalPort = 0;
-               HeadlessGlobals->TerminalEnabled = FALSE;
-       }
-       return STATUS_SUCCESS;
+    /* Enable if requested, as long as this isn't a PCI serial port crashing */
+    if ((Enable) &&
+        !(HeadlessGlobals->TerminalEnabled) &&
+        !((HeadlessGlobals->IsMMIODevice) && (HeadlessGlobals->InBugCheck)))
+    {
+        /* Initialize the COM port with cportlib */
+        HeadlessGlobals->TerminalEnabled = InbvPortInitialize(HeadlessGlobals->
+                                                              TerminalBaudRate,
+                                                              HeadlessGlobals->
+                                                              TerminalPortNumber,
+                                                              HeadlessGlobals->
+                                                              TerminalPortAddress,
+                                                              &HeadlessGlobals->
+                                                              TerminalPort,
+                                                              HeadlessGlobals->
+                                                              IsMMIODevice);
+        if (!HeadlessGlobals->TerminalEnabled)
+        {
+            DPRINT1("Failed to initialize port through cportlib\n");
+            return STATUS_UNSUCCESSFUL;
+        }
+
+        /* Cleanup the screen and reset the cursor */
+        HdlspSendStringAtBaud((PUCHAR)"\x1B[2J");
+        HdlspSendStringAtBaud((PUCHAR)"\x1B[H");
+
+        /* Enable FIFO */
+        InbvPortEnableFifo(HeadlessGlobals->TerminalPort, TRUE);
+    }
+    else if (!Enable)
+    {
+        /* Specific case when headless is being disabled */
+        InbvPortTerminate(HeadlessGlobals->TerminalPort);
+        HeadlessGlobals->TerminalPort = 0;
+        HeadlessGlobals->TerminalEnabled = FALSE;
+    }
+
+    /* All done */
+    return STATUS_SUCCESS;
 }
 
 VOID
 NTAPI
 INIT_FUNCTION
-HeadlessInit(
-       IN PLOADER_PARAMETER_BLOCK LoaderBlock
-       )
+HeadlessInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 {
-       PHEADLESS_LOADER_BLOCK HeadlessBlock;
-
-       HeadlessBlock = LoaderBlock->Extension->HeadlessLoaderBlock;
-       if (!HeadlessBlock) return;
-       if ((HeadlessBlock->PortNumber > 4) && (HeadlessBlock->UsedBiosSettings)) return;
-
-       HeadlessGlobals = ExAllocatePoolWithTag(
-               NonPagedPool,
-               sizeof(HEADLESS_GLOBALS),
-               'sldH');
-       if (!HeadlessGlobals) return;
-
-       /* Zero and copy loader data */
-       RtlZeroMemory(HeadlessGlobals, sizeof(HEADLESS_GLOBALS));
-       HeadlessGlobals->TerminalPortNumber = HeadlessBlock->PortNumber;
-       HeadlessGlobals->TerminalPortAddress = HeadlessBlock->PortAddress;
-       HeadlessGlobals->TerminalBaudRate = HeadlessBlock->BaudRate;
-       HeadlessGlobals->TerminalParity = HeadlessBlock->Parity;
-       HeadlessGlobals->TerminalStopBits = HeadlessBlock->StopBits;
-       HeadlessGlobals->UsedBiosSettings = HeadlessBlock->UsedBiosSettings;
-       HeadlessGlobals->IsMMIODevice = HeadlessBlock->IsMMIODevice;
-       HeadlessGlobals->TerminalType = HeadlessBlock->TerminalType;
-       HeadlessGlobals->SystemGUID = HeadlessBlock->SystemGUID;
-
-       /* These two are opposites of each other */
-       if (HeadlessGlobals->IsMMIODevice) HeadlessGlobals->IsNonLegacyDevice = TRUE;
-
-       /* Check for a PCI device, warn that this isn't supported */
-       if (HeadlessBlock->PciDeviceId != PCI_INVALID_VENDORID)
-       {
-               DPRINT1("PCI Serial Ports not supported\n");
-       }
-
-       /* Log entries are not yet supported */
-       DPRINT1("FIXME: No Headless logging support\n");
-
-       /* Allocate temporary buffer */
-       HeadlessGlobals->TmpBuffer = ExAllocatePoolWithTag(NonPagedPool, 80, 'sldH');
-       if (!HeadlessGlobals->TmpBuffer) return;
-
-       /* Windows seems to apply some special hacks for 9600 bps */
-       if (HeadlessGlobals->TerminalBaudRate == 9600)
-       {
-               DPRINT1("Please use other baud rate than 9600bps for now\n");
-       }
+    PHEADLESS_LOADER_BLOCK HeadlessBlock;
+
+    /* Only initialize further if the loader found EMS enabled */
+    HeadlessBlock = LoaderBlock->Extension->HeadlessLoaderBlock;
+    if (!HeadlessBlock) return;
+
+    /* Ignore invalid EMS settings */
+    if ((HeadlessBlock->PortNumber > 4) && (HeadlessBlock->UsedBiosSettings)) return;
+
+    /* Allocate the global headless data */
+    HeadlessGlobals = ExAllocatePoolWithTag(NonPagedPool,
+                                            sizeof(*HeadlessGlobals),
+                                            'sldH');
+    if (!HeadlessGlobals) return;
+
+    /* Zero and copy loader data */
+    RtlZeroMemory(HeadlessGlobals, sizeof(*HeadlessGlobals));
+    HeadlessGlobals->TerminalPortNumber = HeadlessBlock->PortNumber;
+    HeadlessGlobals->TerminalPortAddress = HeadlessBlock->PortAddress;
+    HeadlessGlobals->TerminalBaudRate = HeadlessBlock->BaudRate;
+    HeadlessGlobals->TerminalParity = HeadlessBlock->Parity;
+    HeadlessGlobals->TerminalStopBits = HeadlessBlock->StopBits;
+    HeadlessGlobals->UsedBiosSettings = HeadlessBlock->UsedBiosSettings;
+    HeadlessGlobals->IsMMIODevice = HeadlessBlock->IsMMIODevice;
+    HeadlessGlobals->TerminalType = HeadlessBlock->TerminalType;
+    HeadlessGlobals->SystemGUID = HeadlessBlock->SystemGUID;
+    DPRINT1("EMS on Port %d (0x%lx) at %d bps\n",
+             HeadlessGlobals->TerminalPortNumber,
+             HeadlessGlobals->TerminalPortAddress,
+             HeadlessGlobals->TerminalBaudRate);
+
+    /* These two are opposites of each other */
+    if (HeadlessGlobals->IsMMIODevice) HeadlessGlobals->IsNonLegacyDevice = TRUE;
+
+    /* Check for a PCI device, warn that this isn't supported */
+    if (HeadlessBlock->PciDeviceId != PCI_INVALID_VENDORID)
+    {
+        DPRINT1("PCI Serial Ports not supported\n");
+    }
+
+    /* Log entries are not yet supported */
+    DPRINT1("FIXME: No Headless logging support\n");
+
+    /* Allocate temporary buffer */
+    HeadlessGlobals->TmpBuffer = ExAllocatePoolWithTag(NonPagedPool, 80, 'sldH');
+    if (!HeadlessGlobals->TmpBuffer) return;
+
+    /* Windows seems to apply some special hacks for 9600 bps */
+    if (HeadlessGlobals->TerminalBaudRate == 9600)
+    {
+        DPRINT1("Please use other baud rate than 9600bps for now\n");
+    }
+
+    /* Enable the terminal */
+    HdlspEnableTerminal(TRUE);
+}
 
-       /* Enable the terminal */
-       HdlspEnableTerminal(TRUE);
+VOID
+NTAPI
+HdlspPutData(IN PUCHAR Data,
+             IN ULONG DataSize)
+{
+    ULONG i;
+    for (i = 0; i < DataSize; i++)
+    {
+        InbvPortPutByte(HeadlessGlobals->TerminalPort, Data[i]++);
+    }
 }
 
 VOID
 NTAPI
-HdlspPutString(
-       IN PUCHAR String
-       )
+HdlspPutString(IN PUCHAR String)
 {
        PUCHAR Dest = HeadlessGlobals->TmpBuffer;
        UCHAR Char = 0;
@@ -197,62 +252,95 @@ HdlspPutString(
 
 NTSTATUS
 NTAPI
-HdlspDispatch(
-       IN HEADLESS_CMD Command,
-       IN PVOID InputBuffer,
-       IN SIZE_T InputBufferSize,
-       OUT PVOID OutputBuffer,
-       OUT PSIZE_T OutputBufferSize
-       )
+HdlspDispatch(IN HEADLESS_CMD Command,
+              IN PVOID InputBuffer,
+              IN SIZE_T InputBufferSize,
+              OUT PVOID OutputBuffer,
+              OUT PSIZE_T OutputBufferSize)
 {
-       //NTSTATUS Status = STATUS_NOT_IMPLEMENTED;
-       ASSERT(HeadlessGlobals != NULL);
+    KIRQL OldIrql;
+    PHEADLESS_RSP_QUERY_INFO HeadlessInfo;
+    PHEADLESS_CMD_PUT_STRING PutString;
+    PHEADLESS_CMD_ENABLE_TERMINAL EnableTerminal;
+    PHEADLESS_RSP_GET_BYTE GetByte;
+    NTSTATUS Status = STATUS_NOT_IMPLEMENTED;
+    ASSERT(HeadlessGlobals != NULL);
 //     ASSERT(HeadlessGlobals->PageLockHandle != NULL);
 
-       /* FIXME: This should be using the headless spinlock */
-
-       /* Ignore non-reentrant commands */
-       if ((Command != HeadlessCmdAddLogEntry) &&
-               (Command != HeadlessCmdStartBugCheck) &&
-               (Command != HeadlessCmdSendBlueScreenData) &&
-               (Command != HeadlessCmdDoBugCheckProcessing))
-       {
-               if (HeadlessGlobals->ProcessingCmd) return STATUS_UNSUCCESSFUL;
-
-               /* Don't allow these commands next time */
-               HeadlessGlobals->ProcessingCmd = TRUE;
-       }
+    /* Ignore non-reentrant commands */
+    if ((Command != HeadlessCmdAddLogEntry) &&
+        (Command != HeadlessCmdStartBugCheck) &&
+        (Command != HeadlessCmdSendBlueScreenData) &&
+        (Command != HeadlessCmdDoBugCheckProcessing))
+    {
+        OldIrql = HdlspAcquireGlobalLock();
+
+        if (HeadlessGlobals->ProcessingCmd)
+        {
+            HdlspReleaselobalLock(OldIrql);
+            return STATUS_UNSUCCESSFUL;
+        }
+
+        /* Don't allow these commands next time */
+        HeadlessGlobals->ProcessingCmd = TRUE;
+        HdlspReleaselobalLock(OldIrql);
+    }
+
+    /* Handle each command */
+    switch (Command)
+    {
+        case HeadlessCmdEnableTerminal:
+
+            /* Make sure the caller passed valid data */
+            if (!(InputBuffer) ||
+                (InputBufferSize != sizeof(*EnableTerminal)))
+            {
+                DPRINT1("Invalid buffer\n");
+                Status = STATUS_INVALID_PARAMETER;
+                break;
+            }
+
+            /* Go and enable it */
+            EnableTerminal = InputBuffer;
+            Status = HdlspEnableTerminal(EnableTerminal->Enable);
+            break;
 
-       /* Handle each command */
-       switch (Command)
-       {
-               case HeadlessCmdEnableTerminal:
-                       break;
                case HeadlessCmdCheckForReboot:
                        break;
 
                case HeadlessCmdPutString:
 
-                       /* Validate the existence of an input buffer */
-                       if (!InputBuffer)
-                       {
-                               //Status = STATUS_INVALID_PARAMETER;
-                               goto Reset;
-                       }
-
-                       /* Terminal should be on */
-                       if (HeadlessGlobals->TerminalEnabled)
-                       {
-                               /* Print each byte in the string making sure VT100 chars are used */
-                               PHEADLESS_CMD_PUT_STRING PutString = (PVOID)InputBuffer;
-                               HdlspPutString(PutString->String);
-                       }
+            /* Validate the existence of an input buffer */
+            if (!InputBuffer)
+            {
+                Status = STATUS_INVALID_PARAMETER;
+                break;
+            }
+
+            /* Terminal should be on */
+            if (HeadlessGlobals->TerminalEnabled)
+            {
+                /* Print each byte in the string making sure VT100 chars are used */
+                PutString = InputBuffer;
+                HdlspPutString(PutString->String);
+            }
+
+            /* Return success either way */
+            Status = STATUS_SUCCESS;
+            break;
+
+        case HeadlessCmdClearDisplay:
+
+            /* Send the VT100 clear screen command if the terminal is enabled */
+            if (HeadlessGlobals->TerminalEnabled)
+            {
+                HdlspSendStringAtBaud((PUCHAR)"\033[2J");
+            }
+
+            /* Return success either way */
+            Status = STATUS_SUCCESS;
+            break;
 
-                       /* Return success either way */
-                       //Status = STATUS_SUCCESS;
-                       break;
-               case HeadlessCmdClearDisplay:
-                       break;
                case HeadlessCmdClearToEndOfDisplay:
                        break;
                case HeadlessCmdClearToEndOfLine:
@@ -267,8 +355,46 @@ HdlspDispatch(
                        break;
                case HeadlessCmdTerminalPoll:
                        break;
-               case HeadlessCmdGetByte:
-                       break;
+
+        case HeadlessCmdGetByte:
+
+            /* Make sure the caller passed valid data */
+            if (!(OutputBuffer) ||
+                !(OutputBufferSize) ||
+                (*OutputBufferSize < sizeof(*GetByte)))
+            {
+                DPRINT1("Invalid buffer\n");
+                Status = STATUS_INVALID_PARAMETER;
+                break;
+            }
+
+            /* Make sure the terminal is enabled */
+            GetByte = OutputBuffer;
+            if (HeadlessGlobals->TerminalEnabled)
+            {
+                /* Poll if something is on the wire */
+                if (InbvPortPollOnly(HeadlessGlobals->TerminalPort))
+                {
+                    /* If so, read it */
+                    InbvPortGetByte(HeadlessGlobals->TerminalPort,
+                                    &GetByte->Value);
+                }
+                else
+                {
+                    /* Nothing is there, return 0 */
+                    GetByte->Value = 0;
+                }
+            }
+            else
+            {
+                /* Otherwise return nothing */
+                GetByte->Value = 0;
+            }
+
+            /* Return success either way */
+            Status = STATUS_SUCCESS;
+            break;
+
                case HeadlessCmdGetLine:
                        break;
                case HeadlessCmdStartBugCheck:
@@ -276,77 +402,145 @@ HdlspDispatch(
                case HeadlessCmdDoBugCheckProcessing:
                        break;
                case HeadlessCmdQueryInformation:
-                       break;
+
+            /* Make sure the caller passed valid data */
+            if (!(OutputBuffer) ||
+                !(OutputBufferSize) ||
+                (*OutputBufferSize < sizeof(*HeadlessInfo)))
+            {
+                DPRINT1("Invalid buffer\n");
+                Status = STATUS_INVALID_PARAMETER;
+                break;
+            }
+
+            /* If we got here, headless is enabled -- we know this much */
+            HeadlessInfo = OutputBuffer;
+            HeadlessInfo->PortType = HeadlessSerialPort;
+            HeadlessInfo->Serial.TerminalAttached = TRUE;
+            HeadlessInfo->Serial.UsedBiosSettings = HeadlessGlobals->UsedBiosSettings;
+            HeadlessInfo->Serial.TerminalBaudRate = HeadlessGlobals->TerminalBaudRate;
+            HeadlessInfo->Serial.TerminalType = HeadlessGlobals->TerminalType;
+
+            /* Now check on what port/baud it's enabled on */
+            if ((HeadlessGlobals->TerminalPortNumber >= 1) ||
+                (HeadlessGlobals->UsedBiosSettings))
+            {
+                /* Get the EMS information */
+                HeadlessInfo->Serial.TerminalPort = HeadlessGlobals->
+                                                    TerminalPortNumber;
+                HeadlessInfo->Serial.TerminalPortBaseAddress = HeadlessGlobals->
+                                                               TerminalPortAddress;
+            }
+            else
+            {
+                /* We don't know for sure */
+                HeadlessInfo->Serial.TerminalPort = SerialPortUndefined;
+                HeadlessInfo->Serial.TerminalPortBaseAddress = 0;
+            }
+
+            /* All done */
+            Status = STATUS_SUCCESS;
+            break;
                case HeadlessCmdAddLogEntry:
                        break;
                case HeadlessCmdDisplayLog:
                        break;
-               case HeadlessCmdSetBlueScreenData:
-                       break;
+        case HeadlessCmdSetBlueScreenData:
+
+            /* Validate the existence of an input buffer */
+            if (!InputBuffer)
+            {
+                Status = STATUS_INVALID_PARAMETER;
+                break;
+            }
+
+            /* Lie so that we can get Hdl bringup a little bit further */
+            UNIMPLEMENTED;
+            Status = STATUS_SUCCESS;
+            break;
                case HeadlessCmdSendBlueScreenData:
                        break;
                case HeadlessCmdQueryGUID:
                        break;
                case HeadlessCmdPutData:
-                       break;
-               default:
-                       break;
-       }
 
-Reset:
-       /* Unset prcessing state */
-       if ((Command != HeadlessCmdAddLogEntry) &&
-               (Command != HeadlessCmdStartBugCheck) &&
-               (Command != HeadlessCmdSendBlueScreenData) &&
-               (Command != HeadlessCmdDoBugCheckProcessing))
-       {
-               ASSERT(HeadlessGlobals->ProcessingCmd == TRUE);
-               HeadlessGlobals->ProcessingCmd = FALSE;
-       }
-
-       //UNIMPLEMENTED;
-       return STATUS_SUCCESS;
+            /* Validate the existence of an input buffer */
+            if (!(InputBuffer) || !(InputBufferSize))
+            {
+                Status = STATUS_INVALID_PARAMETER;
+                break;
+            }
+
+            /* Terminal should be on */
+            if (HeadlessGlobals->TerminalEnabled)
+            {
+                /* Print each byte in the string making sure VT100 chars are used */
+                PutString = InputBuffer;
+                HdlspPutData(PutString->String, InputBufferSize);
+            }
+
+            /* Return success either way */
+            Status = STATUS_SUCCESS;
+            break;
+
+        default:
+            break;
+    }
+
+    /* Unset processing state */
+    if ((Command != HeadlessCmdAddLogEntry) &&
+        (Command != HeadlessCmdStartBugCheck) &&
+        (Command != HeadlessCmdSendBlueScreenData) &&
+        (Command != HeadlessCmdDoBugCheckProcessing))
+    {
+        ASSERT(HeadlessGlobals->ProcessingCmd == TRUE);
+        HeadlessGlobals->ProcessingCmd = FALSE;
+    }
+
+    /* All done */
+    return Status;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 NTAPI
-HeadlessDispatch(
-       IN HEADLESS_CMD Command,
-       IN PVOID InputBuffer,
-       IN SIZE_T InputBufferSize,
-       OUT PVOID OutputBuffer,
-       OUT PSIZE_T OutputBufferSize
-       )
+HeadlessDispatch(IN HEADLESS_CMD Command,
+                 IN PVOID InputBuffer,
+                 IN SIZE_T InputBufferSize,
+                 OUT PVOID OutputBuffer,
+                 OUT PSIZE_T OutputBufferSize)
 {
-       /* Check for stubs that will expect something even with headless off */
-       if (!HeadlessGlobals)
-       {
-               /* Don't allow the SAC to connect */
-               if (Command == HeadlessCmdEnableTerminal) return STATUS_UNSUCCESSFUL;
-
-               /* Send bogus reply */
-               if ((Command == HeadlessCmdQueryInformation) ||
-                       (Command == HeadlessCmdGetByte) ||
-                       (Command == HeadlessCmdGetLine) ||
-                       (Command == HeadlessCmdCheckForReboot) ||
-                       (Command == HeadlessCmdTerminalPoll))
-               {
-                       if (!(OutputBuffer) || !(OutputBufferSize)) return STATUS_INVALID_PARAMETER;
-                       RtlZeroMemory(OutputBuffer, *OutputBufferSize);
-               }
-               return STATUS_SUCCESS;
-       }
-       
-       /* Do the real work */
-       return HdlspDispatch(
-               Command, 
-               InputBuffer,
-               InputBufferSize,
-               OutputBuffer,
-               OutputBufferSize);
-}    
+    /* Check for stubs that will expect something even with headless off */
+    if (!HeadlessGlobals)
+    {
+        /* Don't allow the SAC to connect */
+        if (Command == HeadlessCmdEnableTerminal) return STATUS_UNSUCCESSFUL;
+
+        /* Send bogus reply */
+        if ((Command == HeadlessCmdQueryInformation) ||
+            (Command == HeadlessCmdGetByte) ||
+            (Command == HeadlessCmdGetLine) ||
+            (Command == HeadlessCmdCheckForReboot) ||
+            (Command == HeadlessCmdTerminalPoll))
+        {
+            if (!(OutputBuffer) || !(OutputBufferSize))
+            {
+                return STATUS_INVALID_PARAMETER;
+            }
+
+            RtlZeroMemory(OutputBuffer, *OutputBufferSize);
+        }
+        return STATUS_SUCCESS;
+    }
+
+    /* Do the real work */
+    return HdlspDispatch(Command, 
+                         InputBuffer,
+                         InputBufferSize,
+                         OutputBuffer,
+                         OutputBufferSize);
+}
 
 /* EOF */
index 5f58cff..d0509be 100644 (file)
@@ -23,6 +23,25 @@ CPPORT Port[4] =
 
 /* FUNCTIONS *****************************************************************/
 
+BOOLEAN
+NTAPI
+InbvPortPollOnly(IN ULONG PortId)
+{
+    UCHAR Dummy;
+
+    /* Poll a byte from the port */
+    return CpGetByte(&Port[PortId], &Dummy, FALSE, TRUE) == CP_GET_SUCCESS;
+}
+
+BOOLEAN
+NTAPI
+InbvPortGetByte(IN ULONG PortId,
+                OUT PUCHAR Char)
+{
+    /* Read a byte from the port */
+    return CpGetByte(&Port[PortId], Char, TRUE, FALSE) == CP_GET_SUCCESS;
+}
+
 VOID
 NTAPI
 InbvPortEnableFifo(IN ULONG   PortId,
index 349a907..2bd0b2f 100644 (file)
@@ -72,12 +72,11 @@ typedef struct _HEADLESS_LOG_ENTRY
 //
 // Headless Bugcheck Information
 //
-typedef struct _HEADLESS_BLUE_SCREEN_DATA
+typedef struct _HEADLESS_CMD_SET_BLUE_SCREEN_DATA
 {
-       PUCHAR Property;
-       PUCHAR XMLData;
-       struct _HEADLESS_BLUE_SCREEN_DATA *Next;
-} HEADLESS_BLUE_SCREEN_DATA, * PHEADLESS_BLUE_SCREEN_DATA;
+    ULONG ValueIndex;
+    UCHAR Data[ANYSIZE_ARRAY];
+} HEADLESS_CMD_SET_BLUE_SCREEN_DATA, *PHEADLESS_CMD_SET_BLUE_SCREEN_DATA;
 
 //
 // Headless Control Structure, mostly for !SAC
@@ -89,7 +88,7 @@ typedef struct _HEADLESS_GLOBALS
        PHEADLESS_LOG_ENTRY LogEntries;
        PUCHAR TmpBuffer;
        PUCHAR InputBuffer;
-       PHEADLESS_BLUE_SCREEN_DATA BlueScreenData;
+    PHEADLESS_CMD_SET_BLUE_SCREEN_DATA BlueScreenData;
        union
        {
                struct
@@ -183,11 +182,21 @@ typedef struct _HEADLESS_RSP_QUERY_INFO
     };
 } HEADLESS_RSP_QUERY_INFO, *PHEADLESS_RSP_QUERY_INFO;
 
+typedef struct _HEADLESS_CMD_ENABLE_TERMINAL
+{
+    BOOLEAN Enable;
+} HEADLESS_CMD_ENABLE_TERMINAL, *PHEADLESS_CMD_ENABLE_TERMINAL;
+
 typedef struct _HEADLESS_CMD_PUT_STRING
 {
        UCHAR String[1];
 } HEADLESS_CMD_PUT_STRING, *PHEADLESS_CMD_PUT_STRING;
 
+typedef struct _HEADLESS_RSP_GET_BYTE
+{
+    UCHAR Value;
+} HEADLESS_RSP_GET_BYTE, *PHEADLESS_RSP_GET_BYTE;
+
 NTSTATUS
 NTAPI
 HeadlessDispatch(
index d8446aa..867c39d 100644 (file)
@@ -107,4 +107,17 @@ InbvPortInitialize(
        IN BOOLEAN IsMMIODevice
 );
 
+BOOLEAN
+NTAPI
+InbvPortPollOnly(
+    IN ULONG PortId
+);
+
+BOOLEAN
+NTAPI
+InbvPortGetByte(
+    IN ULONG PortId,
+    OUT PUCHAR Char
+);
+
 extern BOOLEAN InbvBootDriverInstalled;
index 93084d6..0607112 100644 (file)
@@ -136,7 +136,7 @@ KdPortGetByteEx(
     IN PCPPORT PortInformation,
     OUT PUCHAR ByteReceived)
 {
-    return (CpGetByte(PortInformation, ByteReceived, FALSE) == CP_GET_SUCCESS);
+    return (CpGetByte(PortInformation, ByteReceived, FALSE, TRUE) == CP_GET_SUCCESS);
 }
 
 VOID
index d7c09b1..1b88549 100644 (file)
@@ -33,51 +33,33 @@ RtlGetNtGlobalFlags(VOID)
 }
 
 /*
-* @implemented
-*/
-NTSTATUS NTAPI
+ * @implemented
+ */
+NTSTATUS 
+NTAPI
 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
 {
-    LONG i;
-    ULONG MaxLength;
+    PAGED_CODE();
 
-    if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
-        lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
-    {
-        lpVersionInformation->dwMajorVersion = NtMajorVersion;
-        lpVersionInformation->dwMinorVersion = NtMinorVersion;
-        lpVersionInformation->dwBuildNumber = NtBuildNumber;
-        lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
-        RtlZeroMemory(lpVersionInformation->szCSDVersion, sizeof(lpVersionInformation->szCSDVersion));
-
-        if(((CmNtCSDVersion >> 8) & 0xFF) != 0)
-        {
-            MaxLength = (sizeof(lpVersionInformation->szCSDVersion) / sizeof(lpVersionInformation->szCSDVersion[0])) - 1;
-            i = _snwprintf(lpVersionInformation->szCSDVersion,
-                           MaxLength,
-                           L"Service Pack %d",
-                           ((CmNtCSDVersion >> 8) & 0xFF));
-            if (i < 0)
-            {
-                /* Null-terminate if it was overflowed */
-                lpVersionInformation->szCSDVersion[MaxLength] = L'\0';
-            }
-        }
+    /* Return the basics */
+    lpVersionInformation->dwMajorVersion = NtMajorVersion;
+    lpVersionInformation->dwMinorVersion = NtMinorVersion;
+    lpVersionInformation->dwBuildNumber = NtBuildNumber & 0x3FFF;
+    lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
 
-        if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
-        {
-            PRTL_OSVERSIONINFOEXW InfoEx = (PRTL_OSVERSIONINFOEXW)lpVersionInformation;
-            InfoEx->wServicePackMajor = (USHORT)(CmNtCSDVersion >> 8) & 0xFF;
-            InfoEx->wServicePackMinor = (USHORT)(CmNtCSDVersion & 0xFF);
-            InfoEx->wSuiteMask = (USHORT)(SharedUserData->SuiteMask & 0xFFFF);
-            InfoEx->wProductType = SharedUserData->NtProductType;
-            InfoEx->wReserved = 0;
-        }
-
-        return STATUS_SUCCESS;
+    /* Check if this is the extended version */
+    if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
+    {
+        PRTL_OSVERSIONINFOEXW InfoEx = (PRTL_OSVERSIONINFOEXW)lpVersionInformation;
+        InfoEx->wServicePackMajor = (USHORT)(CmNtCSDVersion >> 8) & 0xFF;
+        InfoEx->wServicePackMinor = (USHORT)(CmNtCSDVersion & 0xFF);
+        InfoEx->wSuiteMask = (USHORT)(SharedUserData->SuiteMask & 0xFFFF);
+        InfoEx->wProductType = SharedUserData->NtProductType;
+        InfoEx->wReserved = 0;
     }
 
-    return STATUS_INVALID_PARAMETER;
+    /* Always succeed */
+    return STATUS_SUCCESS;
 }
 
 /* EOF */
index 148c2ea..bd803eb 100644 (file)
@@ -99,17 +99,17 @@ CSR_API(BaseSrvDefineDosDevice)
     DWORD dwFlags;
     PWSTR lpBuffer;
 
-    DPRINT("BaseSrvDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetName:%wZ\n",
-           DefineDosDeviceRequest->dwFlags,
+    DPRINT("BaseSrvDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetPath:%wZ\n",
+           DefineDosDeviceRequest->Flags,
            &DefineDosDeviceRequest->DeviceName,
-           &DefineDosDeviceRequest->TargetName);
+           &DefineDosDeviceRequest->TargetPath);
 
     Matched = AddHistory = FALSE;
     HistoryEntry = NULL;
     AdminSid = SystemSid = WorldSid = NULL;
     SecurityDescriptor = NULL;
     ListHead = &DosDeviceHistory;
-    dwFlags = DefineDosDeviceRequest->dwFlags;
+    dwFlags = DefineDosDeviceRequest->Flags;
 
     /* Validate the flags */
     if ( (dwFlags & 0xFFFFFFF0) ||
@@ -136,7 +136,7 @@ CSR_API(BaseSrvDefineDosDevice)
         if (!NT_SUCCESS(Status))
             _SEH2_LEAVE;
 
-        RequestLinkTarget = &DefineDosDeviceRequest->TargetName;
+        RequestLinkTarget = &DefineDosDeviceRequest->TargetPath;
         lpBuffer = (PWSTR)RtlAllocateHeap(BaseSrvHeap,
                                           HEAP_ZERO_MEMORY,
                                           RequestDeviceName.MaximumLength + 5 * sizeof(WCHAR));
index 8705372..ac06ed6 100644 (file)
@@ -18,7 +18,7 @@
 CSR_API(BaseSrvGetTempFile)
 {
     static UINT BaseGetTempFileUnique = 0;
-    PBASE_GET_TEMP_FILE GetTempFile = &((PBASE_API_MESSAGE)ApiMessage)->Data.GetTempFile;
+    PBASE_GET_TEMP_FILE GetTempFile = &((PBASE_API_MESSAGE)ApiMessage)->Data.GetTempFileRequest;
 
     /* Return 16-bits ID */
     GetTempFile->UniqueID = (++BaseGetTempFileUnique & 0xFFFF);
@@ -211,24 +211,24 @@ CSR_API(BaseSrvExitProcess)
 
 CSR_API(BaseSrvGetProcessShutdownParam)
 {
-    PBASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.GetShutdownParametersRequest;
+    PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.ShutdownParametersRequest;
     PCSR_THREAD CsrThread = CsrGetClientThread();
     ASSERT(CsrThread);
 
-    GetShutdownParametersRequest->Level = CsrThread->Process->ShutdownLevel;
-    GetShutdownParametersRequest->Flags = CsrThread->Process->ShutdownFlags;
+    ShutdownParametersRequest->ShutdownLevel = CsrThread->Process->ShutdownLevel;
+    ShutdownParametersRequest->ShutdownFlags = CsrThread->Process->ShutdownFlags;
 
     return STATUS_SUCCESS;
 }
 
 CSR_API(BaseSrvSetProcessShutdownParam)
 {
-    PBASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.SetShutdownParametersRequest;
+    PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS ShutdownParametersRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.ShutdownParametersRequest;
     PCSR_THREAD CsrThread = CsrGetClientThread();
     ASSERT(CsrThread);
 
-    CsrThread->Process->ShutdownLevel = SetShutdownParametersRequest->Level;
-    CsrThread->Process->ShutdownFlags = SetShutdownParametersRequest->Flags;
+    CsrThread->Process->ShutdownLevel = ShutdownParametersRequest->ShutdownLevel;
+    CsrThread->Process->ShutdownFlags = ShutdownParametersRequest->ShutdownFlags;
 
     return STATUS_SUCCESS;
 }
diff --git a/subsystems/win/basesrv/vdm.c b/subsystems/win/basesrv/vdm.c
new file mode 100644 (file)
index 0000000..d698f4a
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS Base API Server DLL
+ * FILE:            subsystems/win/basesrv/vdm.c
+ * PURPOSE:         Virtual DOS Machines (VDM) Support
+ * PROGRAMMERS:     Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ */
+
+/* INCLUDES *******************************************************************/
+
+#include "basesrv.h"
+
+#define NDEBUG
+#include <debug.h>
+
+/* EOF */
index d56b50d..123f302 100644 (file)
@@ -134,7 +134,7 @@ CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage)
     PCSR_THREAD CsrThread = NULL;
     PCSR_PROCESS CsrProcess = NULL;
     NTSTATUS Status = STATUS_SUCCESS;
-    PCSR_CONNECTION_INFO ConnectInfo = &ApiMessage->ConnectionInfo;
+    PCSR_API_CONNECTINFO ConnectInfo = &ApiMessage->ConnectionInfo;
     BOOLEAN AllowConnection = FALSE;
     REMOTE_PORT_VIEW RemotePortView;
     HANDLE ServerPort;
@@ -913,7 +913,7 @@ CsrApiPortInitialize(VOID)
     {
         DPRINT1("CSRSS: Creating %wZ port and associated threads\n", &CsrApiPortName);
         DPRINT1("CSRSS: sizeof( CONNECTINFO ) == %ld  sizeof( API_MSG ) == %ld\n",
-                sizeof(CSR_CONNECTION_INFO), sizeof(CSR_API_MESSAGE));
+                sizeof(CSR_API_CONNECTINFO), sizeof(CSR_API_MESSAGE));
     }
 
     /* FIXME: Create a Security Descriptor */
@@ -928,7 +928,7 @@ CsrApiPortInitialize(VOID)
     /* Create the Port Object */
     Status = NtCreatePort(&CsrApiPort,
                           &ObjectAttributes,
-                          sizeof(CSR_CONNECTION_INFO),
+                          sizeof(CSR_API_CONNECTINFO),
                           sizeof(CSR_API_MESSAGE),
                           16 * PAGE_SIZE);
     if (NT_SUCCESS(Status))
index 60385d9..e03cc89 100644 (file)
@@ -172,7 +172,7 @@ CsrInitializeNtSessionList(VOID);
 NTSTATUS
 NTAPI
 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
-                          OUT PCSR_CONNECTION_INFO ConnectInfo);
+                          OUT PCSR_API_CONNECTINFO ConnectInfo);
 
 NTSTATUS
 NTAPI
index 15d2e59..668a0f4 100644 (file)
@@ -444,7 +444,7 @@ CsrSrvCreateSharedSection(IN PCHAR ParameterValue)
 NTSTATUS
 NTAPI
 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
-                          OUT PCSR_CONNECTION_INFO ConnectInfo)
+                          OUT PCSR_API_CONNECTINFO ConnectInfo)
 {
     NTSTATUS Status;
     ULONG ViewSize = 0;
index 9b04050..ef55703 100644 (file)
@@ -307,7 +307,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics)
     FT_Face Face;
     ANSI_STRING AnsiFaceName;
     PFONT_ENTRY Entry;
-    PSECTION_OBJECT SectionObject;
+    PVOID SectionObject;
     ULONG ViewSize = 0;
     LARGE_INTEGER SectionSize;
     UNICODE_STRING FontRegPath = RTL_CONSTANT_STRING(L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
@@ -330,7 +330,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics)
     }
 
     SectionSize.QuadPart = 0LL;
-    Status = MmCreateSection((PVOID)&SectionObject, SECTION_ALL_ACCESS,
+    Status = MmCreateSection(&SectionObject, SECTION_ALL_ACCESS,
                              NULL, &SectionSize, PAGE_READONLY,
                              SEC_COMMIT, FileHandle, NULL);
     if (!NT_SUCCESS(Status))
index 672303e..25e1f9e 100644 (file)
@@ -11,7 +11,7 @@ typedef struct _DESKTOP
     PWND spwndTray;
     PWND spwndMessage;
     PWND spwndTooltip;
-    PSECTION_OBJECT hsectionDesktop;
+    PVOID hsectionDesktop;
     PWIN32HEAP pheapDesktop;
     ULONG_PTR ulHeapSize;
     LIST_ENTRY PtiList;
index 7ded7d1..b3e1539 100644 (file)
 
 HANDLE hModuleWin;
 
-PGDI_HANDLE_TABLE NTAPI GDIOBJ_iAllocHandleTable(OUT PSECTION_OBJECT *SectionObject);
+PGDI_HANDLE_TABLE NTAPI GDIOBJ_iAllocHandleTable(OUT PVOID *SectionObject);
 BOOL NTAPI GDI_CleanupForProcess (struct _EPROCESS *Process);
 NTSTATUS NTAPI UserDestroyThreadInfo(struct _ETHREAD *Thread);
 
 HANDLE GlobalUserHeap = NULL;
-PSECTION_OBJECT GlobalUserHeapSection = NULL;
+PVOID GlobalUserHeapSection = NULL;
 
 PSERVERINFO gpsi = NULL; // Global User Server Information.
 
index 2206f30..a35079b 100644 (file)
@@ -30,7 +30,7 @@ BOOL FASTCALL UserIsEnteredExclusive(VOID);
 extern HANDLE GlobalUserHeap;
 
 PWIN32HEAP
-UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
+UserCreateHeap(OUT PVOID *SectionObject,
                IN OUT PVOID *SystemBase,
                IN SIZE_T HeapSize);
 
index be5c0d9..482484a 100644 (file)
@@ -63,7 +63,7 @@ IntUserHeapCommitRoutine(
     {
         SIZE_T ViewSize = 0;
         LARGE_INTEGER Offset;
-        extern PSECTION_OBJECT GlobalUserHeapSection;
+        extern PVOID GlobalUserHeapSection;
 
         /* HACK: This needs to be handled during startup only... */
         ASSERT(Base == (PVOID)GlobalUserHeap);
@@ -114,7 +114,7 @@ IntUserHeapCommitRoutine(
 }
 
 static PWIN32HEAP
-IntUserHeapCreate(IN PSECTION_OBJECT SectionObject,
+IntUserHeapCreate(IN PVOID SectionObject,
                   IN PVOID *SystemMappedBase,
                   IN ULONG HeapSize)
 {
@@ -172,7 +172,7 @@ IntUserHeapCreate(IN PSECTION_OBJECT SectionObject,
 }
 
 PWIN32HEAP
-UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
+UserCreateHeap(OUT PVOID *SectionObject,
                IN OUT PVOID *SystemBase,
                IN SIZE_T HeapSize)
 {
index a1ba235..e2ee993 100644 (file)
@@ -397,12 +397,12 @@ ConSrvConnect(IN PCSR_PROCESS CsrProcess,
      **************************************************************************/
 
     NTSTATUS Status = STATUS_SUCCESS;
-    PCONSOLE_CONNECTION_INFO ConnectInfo = (PCONSOLE_CONNECTION_INFO)ConnectionInfo;
+    PCONSRV_API_CONNECTINFO ConnectInfo = (PCONSRV_API_CONNECTINFO)ConnectionInfo;
     PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrProcess);
 
     if ( ConnectionInfo       == NULL ||
          ConnectionInfoLength == NULL ||
-        *ConnectionInfoLength != sizeof(CONSOLE_CONNECTION_INFO) )
+        *ConnectionInfoLength != sizeof(CONSRV_API_CONNECTINFO) )
     {
         DPRINT1("CONSRV: Connection failed\n");
         return STATUS_UNSUCCESSFUL;