From 88d888026291c31ddabcd333375c51d2601f69a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 9 Aug 2013 22:23:27 +0000 Subject: [PATCH 01/68] [CMAKE] Fix console apps entry-point (problem since revision r53553). svn path=/trunk/; revision=59683 --- reactos/cmake/CMakeMacros.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/reactos/cmake/CMakeMacros.cmake b/reactos/cmake/CMakeMacros.cmake index 187ed769c43..63a99ce0c21 100644 --- a/reactos/cmake/CMakeMacros.cmake +++ b/reactos/cmake/CMakeMacros.cmake @@ -430,7 +430,13 @@ function(set_module_type MODULE TYPE) elseif(${TYPE} STREQUAL nativecui) set(__entrypoint NtProcessStartup) set(__entrystack 4) - elseif((${TYPE} STREQUAL win32gui) OR (${TYPE} STREQUAL win32cui)) + elseif(${TYPE} STREQUAL win32cui) + if(__module_UNICODE) + set(__entrypoint wmainCRTStartup) + else() + set(__entrypoint mainCRTStartup) + endif() + elseif(${TYPE} STREQUAL win32gui) if(__module_UNICODE) set(__entrypoint wWinMainCRTStartup) else() From 206be3cc65f441ffadef67dfa62e82e8a167b014 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 10 Aug 2013 12:53:29 +0000 Subject: [PATCH 02/68] [SAMSRV] Initialize default domain ForceLogoff time. svn path=/trunk/; revision=59685 --- reactos/dll/win32/samsrv/samsrv.h | 1 + reactos/dll/win32/samsrv/setup.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/samsrv/samsrv.h b/reactos/dll/win32/samsrv/samsrv.h index 8a63f72f517..a9f2f2ddde7 100644 --- a/reactos/dll/win32/samsrv/samsrv.h +++ b/reactos/dll/win32/samsrv/samsrv.h @@ -9,6 +9,7 @@ #include #include +#include #define WIN32_NO_STATUS #define _INC_WINDOWS #define COM_NO_WINDOWS_H diff --git a/reactos/dll/win32/samsrv/setup.c b/reactos/dll/win32/samsrv/setup.c index 7f1465a429a..b265dbbdec9 100644 --- a/reactos/dll/win32/samsrv/setup.c +++ b/reactos/dll/win32/samsrv/setup.c @@ -577,7 +577,7 @@ SampSetupCreateDomain(IN HANDLE hServerKey, FixedData.DomainModifiedCount.QuadPart = 0; FixedData.MaxPasswordAge.QuadPart = -(6LL * 7LL * 24LL * 60LL * 60LL * TICKS_PER_SECOND); /* 6 weeks */ FixedData.MinPasswordAge.QuadPart = 0; /* right now */ -// FixedData.ForceLogoff.QuadPart = // very far in the future aka never + FixedData.ForceLogoff.QuadPart = LLONG_MAX; /* very far in the future aka never */ FixedData.LockoutDuration.QuadPart = -(30LL * 60LL * TICKS_PER_SECOND); /* 30 minutes */ FixedData.LockoutObservationWindow.QuadPart = -(30LL * 60LL * TICKS_PER_SECOND); /* 30 minutes */ FixedData.ModifiedCountAtLastPromotion.QuadPart = 0; From c6b4ad3605579d2179c4fb649e9b7cbe1019f244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 10 Aug 2013 15:00:50 +0000 Subject: [PATCH 03/68] [SPEC2DEF] In GCC builds, LD sucks, and therefore, use NAME instead of LIBRARY to prevent that GNU crap from marking executables as dlls just because they export stuff, which is needed by both ntoskrnl and ntvdm. Tested and approved by Aleksandar Aandrejevic a.k.a. [TheFlash], gigaherz and Amine Khaldi. See: http://msdn.microsoft.com/en-us/library/28d6s79h.aspx - "Module-Definition (.Def) Files" http://msdn.microsoft.com/en-us/library/30fw19zw.aspx - For a description of the LIBRARY keyword http://msdn.microsoft.com/en-us/library/03b3wfkt.aspx - For a description of the NAME keyword http://sourceware.org/binutils/docs-2.16/binutils/def-file-format.html - "The format of the dlltool .def file" (GCC) for more information. svn path=/trunk/; revision=59686 --- reactos/tools/spec2def/spec2def.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/tools/spec2def/spec2def.c b/reactos/tools/spec2def/spec2def.c index e5cee3c85ec..138f39d014e 100644 --- a/reactos/tools/spec2def/spec2def.c +++ b/reactos/tools/spec2def/spec2def.c @@ -306,7 +306,7 @@ OutputHeader_def(FILE *file, char *libname) { fprintf(file, "; File generated automatically, do not edit!\n\n" - "LIBRARY %s\n\n" + "NAME %s\n\n" "EXPORTS\n", libname); } From ff78b2da31fb05e057da329fd1d2080c39cebf0b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 10 Aug 2013 19:24:03 +0000 Subject: [PATCH 04/68] [NETAPI32] Reimplement NetUserModalsGet and add NetUserModalsSet stub. svn path=/trunk/; revision=59689 --- reactos/dll/win32/netapi32/access.c | 124 -------- reactos/dll/win32/netapi32/netapi32.spec | 2 +- reactos/dll/win32/netapi32/user.c | 344 +++++++++++++++++++++++ 3 files changed, 345 insertions(+), 125 deletions(-) diff --git a/reactos/dll/win32/netapi32/access.c b/reactos/dll/win32/netapi32/access.c index 117392e8ad8..968cd30469f 100644 --- a/reactos/dll/win32/netapi32/access.c +++ b/reactos/dll/win32/netapi32/access.c @@ -262,130 +262,6 @@ NetGetDCName(LPCWSTR servername, LPCWSTR domainname, LPBYTE *bufptr) return NERR_DCNotFound; /* say we can't find a domain controller */ } -/****************************************************************************** - * NetUserModalsGet (NETAPI32.@) - * - * Retrieves global information for all users and global groups in the security - * database. - * - * PARAMS - * szServer [I] Specifies the DNS or the NetBIOS name of the remote server - * on which the function is to execute. - * level [I] Information level of the data. - * 0 Return global passwords parameters. bufptr points to a - * USER_MODALS_INFO_0 struct. - * 1 Return logon server and domain controller information. bufptr - * points to a USER_MODALS_INFO_1 struct. - * 2 Return domain name and identifier. bufptr points to a - * USER_MODALS_INFO_2 struct. - * 3 Return lockout information. bufptr points to a USER_MODALS_INFO_3 - * struct. - * pbuffer [I] Buffer that receives the data. - * - * RETURNS - * Success: NERR_Success. - * Failure: - * ERROR_ACCESS_DENIED - the user does not have access to the info. - * NERR_InvalidComputer - computer name is invalid. - */ -NET_API_STATUS WINAPI NetUserModalsGet( - LPCWSTR szServer, DWORD level, LPBYTE *pbuffer) -{ - TRACE("(%s %d %p)\n", debugstr_w(szServer), level, pbuffer); - - switch (level) - { - case 0: - /* return global passwords parameters */ - FIXME("level 0 not implemented!\n"); - *pbuffer = NULL; - return NERR_InternalError; - case 1: - /* return logon server and domain controller info */ - FIXME("level 1 not implemented!\n"); - *pbuffer = NULL; - return NERR_InternalError; - case 2: - { - /* return domain name and identifier */ - PUSER_MODALS_INFO_2 umi; - LSA_HANDLE policyHandle; - LSA_OBJECT_ATTRIBUTES objectAttributes; - PPOLICY_ACCOUNT_DOMAIN_INFO domainInfo; - NTSTATUS ntStatus; - PSID domainIdentifier = NULL; - int domainNameLen, domainIdLen; - - ZeroMemory(&objectAttributes, sizeof(objectAttributes)); - objectAttributes.Length = sizeof(objectAttributes); - - ntStatus = LsaOpenPolicy(NULL, &objectAttributes, - POLICY_VIEW_LOCAL_INFORMATION, - &policyHandle); - if (ntStatus != STATUS_SUCCESS) - { - WARN("LsaOpenPolicy failed with NT status %x\n", - LsaNtStatusToWinError(ntStatus)); - return ntStatus; - } - - ntStatus = LsaQueryInformationPolicy(policyHandle, - PolicyAccountDomainInformation, - (PVOID *)&domainInfo); - if (ntStatus != STATUS_SUCCESS) - { - WARN("LsaQueryInformationPolicy failed with NT status %x\n", - LsaNtStatusToWinError(ntStatus)); - LsaClose(policyHandle); - return ntStatus; - } - - domainIdentifier = domainInfo->DomainSid; - domainIdLen = (domainIdentifier) ? GetLengthSid(domainIdentifier) : 0; - domainNameLen = lstrlenW(domainInfo->DomainName.Buffer) + 1; - LsaClose(policyHandle); - - ntStatus = NetApiBufferAllocate(sizeof(USER_MODALS_INFO_2) + - domainIdLen + - domainNameLen * sizeof(WCHAR), - (LPVOID *)pbuffer); - - if (ntStatus != NERR_Success) - { - WARN("NetApiBufferAllocate() failed\n"); - LsaFreeMemory(domainInfo); - return ntStatus; - } - - umi = (USER_MODALS_INFO_2 *) *pbuffer; - umi->usrmod2_domain_id = (domainIdLen > 0) ? (*pbuffer + sizeof(USER_MODALS_INFO_2)) : NULL; - umi->usrmod2_domain_name = (LPWSTR)(*pbuffer + - sizeof(USER_MODALS_INFO_2) + domainIdLen); - - lstrcpynW(umi->usrmod2_domain_name, - domainInfo->DomainName.Buffer, - domainNameLen); - if (domainIdLen > 0) - CopySid(GetLengthSid(domainIdentifier), umi->usrmod2_domain_id, - domainIdentifier); - - LsaFreeMemory(domainInfo); - - break; - } - case 3: - /* return lockout information */ - FIXME("level 3 not implemented!\n"); - *pbuffer = NULL; - return NERR_InternalError; - default: - TRACE("Invalid level %d is specified\n", level); - *pbuffer = NULL; - return ERROR_INVALID_LEVEL; - } - - return NERR_Success; -} NET_API_STATUS WINAPI NetUseAdd(LMSTR servername, DWORD level, LPBYTE bufptr, LPDWORD parm_err) { diff --git a/reactos/dll/win32/netapi32/netapi32.spec b/reactos/dll/win32/netapi32/netapi32.spec index 20ac5feb87f..2f518b5ed9f 100644 --- a/reactos/dll/win32/netapi32/netapi32.spec +++ b/reactos/dll/win32/netapi32/netapi32.spec @@ -209,7 +209,7 @@ @ stdcall NetUserGetInfo(wstr wstr long ptr) @ stdcall NetUserGetLocalGroups(wstr wstr long long ptr long ptr ptr) @ stdcall NetUserModalsGet(wstr long ptr) -@ stub NetUserModalsSet +@ stdcall NetUserModalsSet(wstr long ptr ptr) @ stdcall NetUserSetGroups(wstr wstr long ptr long) @ stdcall NetUserSetInfo(wstr wstr long ptr ptr) @ stdcall NetWkstaGetInfo(wstr long ptr) diff --git a/reactos/dll/win32/netapi32/user.c b/reactos/dll/win32/netapi32/user.c index 7b5389a1a2e..dcd313d515a 100644 --- a/reactos/dll/win32/netapi32/user.c +++ b/reactos/dll/win32/netapi32/user.c @@ -47,6 +47,24 @@ typedef struct _ENUM_CONTEXT } ENUM_CONTEXT, *PENUM_CONTEXT; +static +ULONG +DeltaTimeToSeconds(LARGE_INTEGER DeltaTime) +{ + LARGE_INTEGER Seconds; + + if (DeltaTime.QuadPart == 0) + return 0; + + Seconds.QuadPart = -DeltaTime.QuadPart / 10000000; + + if (Seconds.HighPart != 0) + return TIMEQ_FOREVER; + + return Seconds.LowPart; +} + + static ULONG GetAccountFlags(ULONG AccountControl) @@ -3058,6 +3076,332 @@ done: } +/****************************************************************************** + * NetUserModalsGet (NETAPI32.@) + * + * Retrieves global information for all users and global groups in the security + * database. + * + * PARAMS + * servername [I] Specifies the DNS or the NetBIOS name of the remote server + * on which the function is to execute. + * level [I] Information level of the data. + * 0 Return global passwords parameters. bufptr points to a + * USER_MODALS_INFO_0 struct. + * 1 Return logon server and domain controller information. bufptr + * points to a USER_MODALS_INFO_1 struct. + * 2 Return domain name and identifier. bufptr points to a + * USER_MODALS_INFO_2 struct. + * 3 Return lockout information. bufptr points to a USER_MODALS_INFO_3 + * struct. + * bufptr [O] Buffer that receives the data. + * + * RETURNS + * Success: NERR_Success. + * Failure: + * ERROR_ACCESS_DENIED - the user does not have access to the info. + * NERR_InvalidComputer - computer name is invalid. + */ +NET_API_STATUS +WINAPI +NetUserModalsGet(LPCWSTR servername, + DWORD level, + LPBYTE *bufptr) +{ + UNICODE_STRING ServerName; + SAM_HANDLE ServerHandle = NULL; + SAM_HANDLE DomainHandle = NULL; + PSID DomainSid = NULL; + PDOMAIN_PASSWORD_INFORMATION PasswordInfo = NULL; + PDOMAIN_LOGOFF_INFORMATION LogoffInfo = NULL; + PDOMAIN_SERVER_ROLE_INFORMATION ServerRoleInfo = NULL; + PDOMAIN_REPLICATION_INFORMATION ReplicationInfo = NULL; + PDOMAIN_NAME_INFORMATION NameInfo = NULL; + PDOMAIN_LOCKOUT_INFORMATION LockoutInfo = NULL; + ULONG DesiredAccess; + ULONG BufferSize; + PUSER_MODALS_INFO_0 umi0; + PUSER_MODALS_INFO_1 umi1; + PUSER_MODALS_INFO_2 umi2; + PUSER_MODALS_INFO_3 umi3; + NET_API_STATUS ApiStatus = NERR_Success; + NTSTATUS Status = STATUS_SUCCESS; + + TRACE("(%s %d %p)\n", debugstr_w(servername), level, bufptr); + + *bufptr = NULL; + + if (servername != NULL) + RtlInitUnicodeString(&ServerName, servername); + + /* 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, + &DomainSid); + if (!NT_SUCCESS(Status)) + { + ERR("GetAccountDomainSid failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + switch (level) + { + case 0: + DesiredAccess = DOMAIN_READ_OTHER_PARAMETERS | DOMAIN_READ_PASSWORD_PARAMETERS; + break; + + case 1: + DesiredAccess = DOMAIN_READ_OTHER_PARAMETERS; + break; + + case 2: + DesiredAccess = DOMAIN_READ_OTHER_PARAMETERS; + break; + + case 3: + DesiredAccess = DOMAIN_READ_PASSWORD_PARAMETERS; + break; + + default: + ApiStatus = ERROR_INVALID_LEVEL; + goto done; + } + + /* Open the Account Domain */ + Status = SamOpenDomain(ServerHandle, + DesiredAccess, + DomainSid, + &DomainHandle); + if (!NT_SUCCESS(Status)) + { + ERR("OpenAccountDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + switch (level) + { + case 0: + /* return global passwords parameters */ + Status = SamQueryInformationDomain(DomainHandle, + DomainPasswordInformation, + (PVOID*)&PasswordInfo); + if (!NT_SUCCESS(Status)) + { + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + Status = SamQueryInformationDomain(DomainHandle, + DomainLogoffInformation, + (PVOID*)&LogoffInfo); + if (!NT_SUCCESS(Status)) + { + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + BufferSize = sizeof(USER_MODALS_INFO_0); + break; + + case 1: + /* return logon server and domain controller info */ + Status = SamQueryInformationDomain(DomainHandle, + DomainServerRoleInformation, + (PVOID*)&ServerRoleInfo); + if (!NT_SUCCESS(Status)) + { + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + Status = SamQueryInformationDomain(DomainHandle, + DomainReplicationInformation, + (PVOID*)&ReplicationInfo); + if (!NT_SUCCESS(Status)) + { + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + BufferSize = sizeof(USER_MODALS_INFO_1) + + ReplicationInfo->ReplicaSourceNodeName.Length + sizeof(WCHAR); + break; + + case 2: + /* return domain name and identifier */ + Status = SamQueryInformationDomain(DomainHandle, + DomainNameInformation, + (PVOID*)&NameInfo); + if (!NT_SUCCESS(Status)) + { + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + BufferSize = sizeof( USER_MODALS_INFO_2 ) + + NameInfo->DomainName.Length + sizeof(WCHAR) + + RtlLengthSid(DomainSid); + break; + + case 3: + /* return lockout information */ + Status = SamQueryInformationDomain(DomainHandle, + DomainLockoutInformation, + (PVOID*)&LockoutInfo); + if (!NT_SUCCESS(Status)) + { + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + BufferSize = sizeof(USER_MODALS_INFO_3); + break; + + default: + TRACE("Invalid level %d is specified\n", level); + ApiStatus = ERROR_INVALID_LEVEL; + goto done; + } + + + ApiStatus = NetApiBufferAllocate(BufferSize, + (LPVOID *)bufptr); + if (ApiStatus != NERR_Success) + { + WARN("NetApiBufferAllocate() failed\n"); + goto done; + } + + switch (level) + { + case 0: + umi0 = (PUSER_MODALS_INFO_0)*bufptr; + + umi0->usrmod0_min_passwd_len = PasswordInfo->MinPasswordLength; + umi0->usrmod0_max_passwd_age = (ULONG)(PasswordInfo->MaxPasswordAge.QuadPart / 10000000); + umi0->usrmod0_min_passwd_age = + DeltaTimeToSeconds(PasswordInfo->MinPasswordAge); + umi0->usrmod0_force_logoff = + DeltaTimeToSeconds(LogoffInfo->ForceLogoff); + umi0->usrmod0_password_hist_len = PasswordInfo->PasswordHistoryLength; + break; + + case 1: + umi1 = (PUSER_MODALS_INFO_1)*bufptr; + + switch (ServerRoleInfo->DomainServerRole) + { + + umi1->usrmod1_role = UAS_ROLE_STANDALONE; + umi1->usrmod1_role = UAS_ROLE_MEMBER; + + case DomainServerRolePrimary: + umi1->usrmod1_role = UAS_ROLE_PRIMARY; + break; + + case DomainServerRoleBackup: + umi1->usrmod1_role = UAS_ROLE_BACKUP; + break; + + default: + ApiStatus = NERR_InternalError; + goto done; + } + + umi1->usrmod1_primary = (LPWSTR)(*bufptr + sizeof(USER_MODALS_INFO_1)); + RtlCopyMemory(umi1->usrmod1_primary, + ReplicationInfo->ReplicaSourceNodeName.Buffer, + ReplicationInfo->ReplicaSourceNodeName.Length); + umi1->usrmod1_primary[ReplicationInfo->ReplicaSourceNodeName.Length / sizeof(WCHAR)] = UNICODE_NULL; + break; + + case 2: + umi2 = (PUSER_MODALS_INFO_2)*bufptr; + + umi2->usrmod2_domain_name = (LPWSTR)(*bufptr + sizeof(USER_MODALS_INFO_2)); + RtlCopyMemory(umi2->usrmod2_domain_name, + NameInfo->DomainName.Buffer, + NameInfo->DomainName.Length); + umi2->usrmod2_domain_name[NameInfo->DomainName.Length / sizeof(WCHAR)] = UNICODE_NULL; + + umi2->usrmod2_domain_id = *bufptr + + sizeof(USER_MODALS_INFO_2) + + NameInfo->DomainName.Length + sizeof(WCHAR); + RtlCopyMemory(umi2->usrmod2_domain_id, + DomainSid, + RtlLengthSid(DomainSid)); + break; + + case 3: + umi3 = (PUSER_MODALS_INFO_3)*bufptr; + umi3->usrmod3_lockout_duration = + DeltaTimeToSeconds(LockoutInfo->LockoutDuration); + umi3->usrmod3_lockout_observation_window = + DeltaTimeToSeconds(LockoutInfo->LockoutObservationWindow ); + umi3->usrmod3_lockout_threshold = LockoutInfo->LockoutThreshold; + break; + } + +done: + if (LockoutInfo != NULL) + SamFreeMemory(LockoutInfo); + + if (NameInfo != NULL) + SamFreeMemory(NameInfo); + + if (ReplicationInfo != NULL) + SamFreeMemory(ReplicationInfo); + + if (ServerRoleInfo != NULL) + SamFreeMemory(ServerRoleInfo); + + if (LogoffInfo != NULL) + SamFreeMemory(LogoffInfo); + + if (PasswordInfo != NULL) + SamFreeMemory(PasswordInfo); + + if (DomainSid != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, DomainSid); + + if (DomainHandle != NULL) + SamCloseHandle(DomainHandle); + + if (ServerHandle != NULL) + SamCloseHandle(ServerHandle); + + return ApiStatus; +} + + +/****************************************************************************** + * NetUserModalsSet (NETAPI32.@) + */ +NET_API_STATUS +WINAPI +NetUserModalsSet(IN LPCWSTR servername, + IN DWORD level, + IN LPBYTE buf, + OUT LPDWORD parm_err) +{ + FIXME("(%s %d %p %p)\n", debugstr_w(servername), level, buf, parm_err); + return ERROR_ACCESS_DENIED; +} + + /****************************************************************************** * NetUserSetGroups (NETAPI32.@) */ From 487e85ab96b6a614b4f5a36083965478d1c0b7ea Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 10 Aug 2013 21:17:38 +0000 Subject: [PATCH 05/68] [CRT/INTRIN_X86] * Fix __ll_rshift() and __ull_rshift(). Thanks to Filip Navara for his help with the issue. * Properly mark int64part as unsigned __int6 in _byteswap_uint64(). * Add missing prototypes. svn path=/trunk/; revision=59692 --- reactos/include/crt/mingw32/intrin_x86.h | 268 +++++++++++++++++++++-- 1 file changed, 255 insertions(+), 13 deletions(-) diff --git a/reactos/include/crt/mingw32/intrin_x86.h b/reactos/include/crt/mingw32/intrin_x86.h index 60f5ea9ebec..00ef94d79d4 100644 --- a/reactos/include/crt/mingw32/intrin_x86.h +++ b/reactos/include/crt/mingw32/intrin_x86.h @@ -88,6 +88,14 @@ __INTRIN_INLINE void* memcpy(void* dest, const void* source, size_t num) /*** Memory barriers ***/ +__INTRIN_INLINE void _ReadWriteBarrier(void); +__INTRIN_INLINE void _mm_mfence(void); +__INTRIN_INLINE void _mm_lfence(void); +__INTRIN_INLINE void _mm_sfence(void); +#ifdef __x86_64__ +__INTRIN_INLINE void __faststorefence(void); +#endif + __INTRIN_INLINE void _ReadWriteBarrier(void) { __asm__ __volatile__("" : : : "memory"); @@ -127,8 +135,47 @@ __INTRIN_INLINE void __faststorefence(void) /*** Atomic operations ***/ +__INTRIN_INLINE long _InterlockedAddLargeStatistic(volatile long long * const Addend, const long Value); +__INTRIN_INLINE unsigned char _interlockedbittestandreset(volatile long * a, const long b); +__INTRIN_INLINE unsigned char _interlockedbittestandset(volatile long * a, const long b); +#if defined(_M_AMD64) +__INTRIN_INLINE unsigned char _interlockedbittestandreset64(volatile long long * a, const long long b); +__INTRIN_INLINE unsigned char _interlockedbittestandset64(volatile long long * a, const long long b); +#endif + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 +__INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand); +__INTRIN_INLINE short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand); +__INTRIN_INLINE long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand); +__INTRIN_INLINE void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand); +__INTRIN_INLINE long _InterlockedExchange(volatile long * const Target, const long Value); +__INTRIN_INLINE void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value); +__INTRIN_INLINE long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value); +__INTRIN_INLINE long _InterlockedExchangeAdd(volatile long * const Addend, const long Value); +__INTRIN_INLINE char _InterlockedAnd8(volatile char * const value, const char mask); +__INTRIN_INLINE short _InterlockedAnd16(volatile short * const value, const short mask); +__INTRIN_INLINE long _InterlockedAnd(volatile long * const value, const long mask); +__INTRIN_INLINE char _InterlockedOr8(volatile char * const value, const char mask); +__INTRIN_INLINE short _InterlockedOr16(volatile short * const value, const short mask); +__INTRIN_INLINE long _InterlockedOr(volatile long * const value, const long mask); +__INTRIN_INLINE char _InterlockedXor8(volatile char * const value, const char mask); +__INTRIN_INLINE short _InterlockedXor16(volatile short * const value, const short mask); +__INTRIN_INLINE long _InterlockedXor(volatile long * const value, const long mask); +__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend); +__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend); +__INTRIN_INLINE short _InterlockedDecrement16(volatile short * const lpAddend); +__INTRIN_INLINE short _InterlockedIncrement16(volatile short * const lpAddend); +#if defined(_M_AMD64) +__INTRIN_INLINE long long _InterlockedExchange64(volatile long long * const Target, const long long Value); +__INTRIN_INLINE long long _InterlockedExchangeAdd64(volatile long long * const Addend, const long long Value); +__INTRIN_INLINE long long _InterlockedAnd64(volatile long long * const value, const long long mask); +__INTRIN_INLINE long long _InterlockedOr64(volatile long long * const value, const long long mask); +__INTRIN_INLINE long long _InterlockedXor64(volatile long long * const value, const long long mask); +__INTRIN_INLINE long long _InterlockedDecrement64(volatile long long * const lpAddend); +__INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const lpAddend); +#endif + __INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); @@ -287,7 +334,33 @@ __INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const lpA } #endif -#else +#else /* (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 */ + +__INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand); +__INTRIN_INLINE short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand); +__INTRIN_INLINE long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand); +__INTRIN_INLINE void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand); +__INTRIN_INLINE long _InterlockedExchange(volatile long * const Target, const long Value); +__INTRIN_INLINE void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value); +__INTRIN_INLINE long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value); +__INTRIN_INLINE long _InterlockedExchangeAdd(volatile long * const Addend, const long Value); +__INTRIN_INLINE char _InterlockedAnd8(volatile char * const value, const char mask); +__INTRIN_INLINE short _InterlockedAnd16(volatile short * const value, const short mask); +__INTRIN_INLINE long _InterlockedAnd(volatile long * const value, const long mask); +__INTRIN_INLINE char _InterlockedOr8(volatile char * const value, const char mask); +__INTRIN_INLINE short _InterlockedOr16(volatile short * const value, const short mask); +__INTRIN_INLINE long _InterlockedOr(volatile long * const value, const long mask); +__INTRIN_INLINE char _InterlockedXor8(volatile char * const value, const char mask); +__INTRIN_INLINE short _InterlockedXor16(volatile short * const value, const short mask); +__INTRIN_INLINE long _InterlockedXor(volatile long * const value, const long mask); +__INTRIN_INLINE long _InterlockedDecrement(volatile long * const lpAddend); +__INTRIN_INLINE long _InterlockedIncrement(volatile long * const lpAddend); +__INTRIN_INLINE short _InterlockedDecrement16(volatile short * const lpAddend); +__INTRIN_INLINE short _InterlockedIncrement16(volatile short * const lpAddend); +#if defined(_M_AMD64) +__INTRIN_INLINE long long _InterlockedDecrement64(volatile long long * const lpAddend); +__INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const lpAddend); +#endif __INTRIN_INLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand) { @@ -530,10 +603,11 @@ __INTRIN_INLINE long long _InterlockedIncrement64(volatile long long * const lpA } #endif -#endif +#endif /* (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 */ #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 && defined(__x86_64__) +__INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand); __INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand) { return __sync_val_compare_and_swap(Destination, Comperand, Exchange); @@ -541,6 +615,7 @@ __INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * con #else +__INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand); __INTRIN_INLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand) { long long retval = Comperand; @@ -609,6 +684,19 @@ __INTRIN_INLINE unsigned char _interlockedbittestandset64(volatile long long * a #endif /*** String operations ***/ + +__INTRIN_INLINE void __stosb(unsigned char * Dest, const unsigned char Data, size_t Count); +__INTRIN_INLINE void __stosw(unsigned short * Dest, const unsigned short Data, size_t Count); +__INTRIN_INLINE void __stosd(unsigned long * Dest, const unsigned long Data, size_t Count); +__INTRIN_INLINE void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count); +__INTRIN_INLINE void __movsw(unsigned short * Destination, const unsigned short * Source, size_t Count); +__INTRIN_INLINE void __movsd(unsigned long * Destination, const unsigned long * Source, size_t Count); +#ifdef _M_AMD64 +__INTRIN_INLINE void __stosq(unsigned __int64 * Dest, const unsigned __int64 Data, size_t Count); +__INTRIN_INLINE void __movsq(unsigned long * Destination, const unsigned long * Source, size_t Count); +#endif + + /* NOTE: we don't set a memory clobber in the __stosX functions because Visual C++ doesn't */ __INTRIN_INLINE void __stosb(unsigned char * Dest, const unsigned char Data, size_t Count) { @@ -695,8 +783,26 @@ __INTRIN_INLINE void __movsq(unsigned long * Destination, const unsigned long * #endif #if defined(_M_AMD64) + /*** GS segment addressing ***/ +__INTRIN_INLINE void __writegsbyte(const unsigned long Offset, const unsigned char Data); +__INTRIN_INLINE void __writegsword(const unsigned long Offset, const unsigned short Data); +__INTRIN_INLINE void __writegsdword(const unsigned long Offset, const unsigned long Data); +__INTRIN_INLINE void __writegsqword(const unsigned long Offset, const unsigned __int64 Data); +__INTRIN_INLINE unsigned char __readgsbyte(const unsigned long Offset); +__INTRIN_INLINE unsigned short __readgsword(const unsigned long Offset); +__INTRIN_INLINE unsigned long __readgsdword(const unsigned long Offset); +__INTRIN_INLINE unsigned __int64 __readgsqword(const unsigned long Offset); +__INTRIN_INLINE void __incgsbyte(const unsigned long Offset); +__INTRIN_INLINE void __incgsword(const unsigned long Offset); +__INTRIN_INLINE void __incgsdword(const unsigned long Offset); +__INTRIN_INLINE void __addgsbyte(const unsigned long Offset, const unsigned char Data); +__INTRIN_INLINE void __addgsword(const unsigned long Offset, const unsigned short Data); +__INTRIN_INLINE void __addgsdword(const unsigned long Offset, const unsigned int Data); +__INTRIN_INLINE void __addgsqword(const unsigned long Offset, const unsigned __int64 Data); + + __INTRIN_INLINE void __writegsbyte(const unsigned long Offset, const unsigned char Data) { __asm__ __volatile__("movb %b[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "ir" (Data) : "memory"); @@ -780,8 +886,24 @@ __INTRIN_INLINE void __addgsqword(const unsigned long Offset, const unsigned __i __asm__ __volatile__("addq %k[Data], %%gs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "ir" (Data) : "memory"); } -#else +#else /* defined(_M_AMD64) */ + /*** FS segment addressing ***/ + +__INTRIN_INLINE void __writefsbyte(const unsigned long Offset, const unsigned char Data); +__INTRIN_INLINE void __writefsword(const unsigned long Offset, const unsigned short Data); +__INTRIN_INLINE void __writefsdword(const unsigned long Offset, const unsigned long Data); +__INTRIN_INLINE unsigned char __readfsbyte(const unsigned long Offset); +__INTRIN_INLINE unsigned short __readfsword(const unsigned long Offset); +__INTRIN_INLINE unsigned long __readfsdword(const unsigned long Offset); +__INTRIN_INLINE void __incfsbyte(const unsigned long Offset); +__INTRIN_INLINE void __incfsword(const unsigned long Offset); +__INTRIN_INLINE void __incfsdword(const unsigned long Offset); +__INTRIN_INLINE void __addfsbyte(const unsigned long Offset, const unsigned char Data); +__INTRIN_INLINE void __addfsword(const unsigned long Offset, const unsigned short Data); +__INTRIN_INLINE void __addfsdword(const unsigned long Offset, const unsigned int Data); + + __INTRIN_INLINE void __writefsbyte(const unsigned long Offset, const unsigned char Data) { __asm__ __volatile__("movb %b[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); @@ -857,10 +979,39 @@ __INTRIN_INLINE void __addfsdword(const unsigned long Offset, const unsigned int else __asm__ __volatile__("addl %k[Data], %%fs:%a[Offset]" : : [Offset] "ir" (Offset), [Data] "iq" (Data) : "memory"); } -#endif + +#endif /* defined(_M_AMD64) */ /*** Bit manipulation ***/ + +__INTRIN_INLINE unsigned char _BitScanForward(unsigned long * const Index, const unsigned long Mask); +__INTRIN_INLINE unsigned char _BitScanReverse(unsigned long * const Index, const unsigned long Mask); +__INTRIN_INLINE unsigned char _bittest(const long * const a, const long b); +#ifdef _M_AMD64 +__INTRIN_INLINE unsigned char _bittest64(const __int64 * const a, const __int64 b); +#endif +__INTRIN_INLINE unsigned char _bittestandcomplement(long * const a, const long b); +__INTRIN_INLINE unsigned char _bittestandreset(long * const a, const long b); +__INTRIN_INLINE unsigned char _bittestandset(long * const a, const long b); +__INTRIN_INLINE unsigned char _rotl8(unsigned char value, unsigned char shift); +__INTRIN_INLINE unsigned short _rotl16(unsigned short value, unsigned char shift); +__INTRIN_INLINE unsigned int _rotl(unsigned int value, int shift); +__INTRIN_INLINE unsigned int _rotr(unsigned int value, int shift); +__INTRIN_INLINE unsigned char _rotr8(unsigned char value, unsigned char shift); +__INTRIN_INLINE unsigned short _rotr16(unsigned short value, unsigned char shift); +__INTRIN_INLINE unsigned long long __ll_lshift(const unsigned long long Mask, const int Bit); +__INTRIN_INLINE long long __ll_rshift(const long long Mask, const int Bit); +__INTRIN_INLINE unsigned long long __ull_rshift(const unsigned long long Mask, int Bit); +__INTRIN_INLINE unsigned short _byteswap_ushort(unsigned short value); +__INTRIN_INLINE unsigned long _byteswap_ulong(unsigned long value); +#ifdef _M_AMD64 +__INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value); +#else +__INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value); +#endif + + __INTRIN_INLINE unsigned char _BitScanForward(unsigned long * const Index, const unsigned long Mask) { __asm__("bsfl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask)); @@ -1001,11 +1152,11 @@ __INTRIN_INLINE unsigned long long __ll_lshift(const unsigned long long Mask, co __INTRIN_INLINE long long __ll_rshift(const long long Mask, const int Bit) { - unsigned long long retval = Mask; + long long retval = Mask; __asm__ ( - "shldl %b[Bit], %%eax, %%edx; sarl %b[Bit], %%eax" : + "shrdl %b[Bit], %%edx, %%eax; sarl %b[Bit], %%edx" : "+A" (retval) : [Bit] "Nc" ((unsigned char)((unsigned long)Bit) & 0xFF) ); @@ -1019,7 +1170,7 @@ __INTRIN_INLINE unsigned long long __ull_rshift(const unsigned long long Mask, i __asm__ ( - "shrdl %b[Bit], %%eax, %%edx; shrl %b[Bit], %%eax" : + "shrdl %b[Bit], %%edx, %%eax; shrl %b[Bit], %%edx" : "+A" (retval) : [Bit] "Nc" ((unsigned char)((unsigned long)Bit) & 0xFF) ); @@ -1052,7 +1203,7 @@ __INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value) __INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value) { union { - __int64 int64part; + unsigned __int64 int64part; struct { unsigned long lowpart; unsigned long hipart; @@ -1067,6 +1218,15 @@ __INTRIN_INLINE unsigned __int64 _byteswap_uint64(unsigned __int64 value) #endif /*** 64-bit math ***/ + +__INTRIN_INLINE long long __emul(const int a, const int b); +__INTRIN_INLINE unsigned long long __emulu(const unsigned int a, const unsigned int b); +#ifdef _M_AMD64 +__INTRIN_INLINE __int64 __mulh(__int64 a, __int64 b); +__INTRIN_INLINE unsigned __int64 __umulh(unsigned __int64 a, unsigned __int64 b); +#endif + + __INTRIN_INLINE long long __emul(const int a, const int b) { long long retval; @@ -1100,6 +1260,27 @@ __INTRIN_INLINE unsigned __int64 __umulh(unsigned __int64 a, unsigned __int64 b) #endif /*** Port I/O ***/ + +__INTRIN_INLINE unsigned char __inbyte(const unsigned short Port); +__INTRIN_INLINE unsigned short __inword(const unsigned short Port); +__INTRIN_INLINE unsigned long __indword(const unsigned short Port); +__INTRIN_INLINE void __inbytestring(unsigned short Port, unsigned char * Buffer, unsigned long Count); +__INTRIN_INLINE void __inwordstring(unsigned short Port, unsigned short * Buffer, unsigned long Count); +__INTRIN_INLINE void __indwordstring(unsigned short Port, unsigned long * Buffer, unsigned long Count); +__INTRIN_INLINE void __outbyte(unsigned short const Port, const unsigned char Data); +__INTRIN_INLINE void __outword(unsigned short const Port, const unsigned short Data); +__INTRIN_INLINE void __outdword(unsigned short const Port, const unsigned long Data); +__INTRIN_INLINE void __outbytestring(unsigned short const Port, const unsigned char * const Buffer, const unsigned long Count); +__INTRIN_INLINE void __outwordstring(unsigned short const Port, const unsigned short * const Buffer, const unsigned long Count); +__INTRIN_INLINE void __outdwordstring(unsigned short const Port, const unsigned long * const Buffer, const unsigned long Count); +__INTRIN_INLINE int _inp(unsigned short Port); +__INTRIN_INLINE unsigned short _inpw(unsigned short Port); +__INTRIN_INLINE unsigned long _inpd(unsigned short Port); +__INTRIN_INLINE int _outp(unsigned short Port, int databyte); +__INTRIN_INLINE unsigned short _outpw(unsigned short Port, unsigned short dataword); +__INTRIN_INLINE unsigned long _outpd(unsigned short Port, unsigned long dataword); + + __INTRIN_INLINE unsigned char __inbyte(const unsigned short Port) { unsigned char byte; @@ -1201,7 +1382,7 @@ __INTRIN_INLINE unsigned long _inpd(unsigned short Port) __INTRIN_INLINE int _outp(unsigned short Port, int databyte) { - __outbyte(Port, databyte); + __outbyte(Port, (unsigned char)databyte); return databyte; } @@ -1219,6 +1400,13 @@ __INTRIN_INLINE unsigned long _outpd(unsigned short Port, unsigned long dataword /*** System information ***/ + +__INTRIN_INLINE void __cpuid(int CPUInfo [], const int InfoType); +__INTRIN_INLINE unsigned long long __rdtsc(void); +__INTRIN_INLINE void __writeeflags(uintptr_t Value); +__INTRIN_INLINE uintptr_t __readeflags(void); + + __INTRIN_INLINE void __cpuid(int CPUInfo[], const int InfoType) { __asm__ __volatile__("cpuid" : "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (InfoType)); @@ -1250,9 +1438,16 @@ __INTRIN_INLINE uintptr_t __readeflags(void) } /*** Interrupts ***/ + +__INTRIN_INLINE void __int2c(void); +__INTRIN_INLINE void _disable(void); +__INTRIN_INLINE void _enable(void); +__INTRIN_INLINE void __halt(void); + #ifdef __clang__ #define __debugbreak() __asm__("int $3") #else +__INTRIN_INLINE void __debugbreak(void); __INTRIN_INLINE void __debugbreak(void) { __asm__("int $3"); @@ -1281,7 +1476,34 @@ __INTRIN_INLINE void __halt(void) /*** Protected memory management ***/ +__INTRIN_INLINE void __invlpg(void * const Address); #ifdef _M_AMD64 +__INTRIN_INLINE void __writecr0(const unsigned __int64 Data); +__INTRIN_INLINE void __writecr3(const unsigned __int64 Data); +__INTRIN_INLINE void __writecr4(const unsigned __int64 Data); +__INTRIN_INLINE void __writecr8(const unsigned __int64 Data); +__INTRIN_INLINE unsigned __int64 __readcr0(void); +__INTRIN_INLINE unsigned __int64 __readcr2(void); +__INTRIN_INLINE unsigned __int64 __readcr3(void); +__INTRIN_INLINE unsigned __int64 __readcr4(void); +__INTRIN_INLINE unsigned __int64 __readcr8(void); +__INTRIN_INLINE unsigned __int64 __readdr(unsigned int reg); +__INTRIN_INLINE void __writedr(unsigned reg, unsigned __int64 value); +#else /* _M_AMD64 */ +__INTRIN_INLINE void __writecr0(const unsigned int Data); +__INTRIN_INLINE void __writecr3(const unsigned int Data); +__INTRIN_INLINE void __writecr4(const unsigned int Data); +__INTRIN_INLINE unsigned long __readcr0(void); +__INTRIN_INLINE unsigned long __readcr2(void); +__INTRIN_INLINE unsigned long __readcr3(void); +__INTRIN_INLINE unsigned long __readcr4(void); +__INTRIN_INLINE unsigned int __readdr(unsigned int reg); +__INTRIN_INLINE void __writedr(unsigned reg, unsigned int value); +#endif /* _M_AMD64 */ + + +#ifdef _M_AMD64 + __INTRIN_INLINE void __writecr0(const unsigned __int64 Data) { __asm__("mov %[Data], %%cr0" : : [Data] "r" (Data) : "memory"); @@ -1336,7 +1558,9 @@ __INTRIN_INLINE unsigned __int64 __readcr8(void) __asm__ __volatile__("movq %%cr8, %q[value]" : [value] "=r" (value)); return value; } -#else + +#else /* _M_AMD64 */ + __INTRIN_INLINE void __writecr0(const unsigned int Data) { __asm__("mov %[Data], %%cr0" : : [Data] "r" (Data) : "memory"); @@ -1379,9 +1603,11 @@ __INTRIN_INLINE unsigned long __readcr4(void) __asm__ __volatile__("mov %%cr4, %[value]" : [value] "=r" (value)); return value; } -#endif + +#endif /* _M_AMD64 */ #ifdef _M_AMD64 + __INTRIN_INLINE unsigned __int64 __readdr(unsigned int reg) { unsigned __int64 value; @@ -1445,7 +1671,9 @@ __INTRIN_INLINE void __writedr(unsigned reg, unsigned __int64 value) break; } } -#else + +#else /* _M_AMD64 */ + __INTRIN_INLINE unsigned int __readdr(unsigned int reg) { unsigned int value; @@ -1509,7 +1737,8 @@ __INTRIN_INLINE void __writedr(unsigned reg, unsigned int value) break; } } -#endif + +#endif /* _M_AMD64 */ __INTRIN_INLINE void __invlpg(void * const Address) { @@ -1518,6 +1747,16 @@ __INTRIN_INLINE void __invlpg(void * const Address) /*** System operations ***/ + +__INTRIN_INLINE unsigned long long __readmsr(const int reg); +__INTRIN_INLINE void __writemsr(const unsigned long Register, const unsigned long long Value); +__INTRIN_INLINE unsigned long long __readpmc(const int counter); +__INTRIN_INLINE unsigned long __segmentlimit(const unsigned long a); +__INTRIN_INLINE void __wbinvd(void); +__INTRIN_INLINE void __lidt(void *Source); +__INTRIN_INLINE void __sidt(void *Destination); + + __INTRIN_INLINE unsigned long long __readmsr(const int reg) { #ifdef _M_AMD64 @@ -1572,6 +1811,9 @@ __INTRIN_INLINE void __sidt(void *Destination) /*** Misc operations ***/ +__INTRIN_INLINE void _mm_pause(void); +__INTRIN_INLINE void __nop(void); + __INTRIN_INLINE void _mm_pause(void) { __asm__ __volatile__("pause" : : : "memory"); From ce6bf0b38ef954a3f2cba6a6cd85a13b38f8f867 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 10 Aug 2013 22:07:04 +0000 Subject: [PATCH 06/68] [CRT] * Annotate tchar_s.h. svn path=/trunk/; revision=59694 --- reactos/include/crt/sec_api/tchar_s.h | 181 ++++++++++++++++++++++---- 1 file changed, 157 insertions(+), 24 deletions(-) diff --git a/reactos/include/crt/sec_api/tchar_s.h b/reactos/include/crt/sec_api/tchar_s.h index 343d348eb94..2b2077f9959 100644 --- a/reactos/include/crt/sec_api/tchar_s.h +++ b/reactos/include/crt/sec_api/tchar_s.h @@ -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_TCHAR_S #define _INC_TCHAR_S @@ -107,7 +108,7 @@ extern "C" { #define _wcsnset_s_l(_Destination,_Destination_size_chars,_Value,_Count,_Locale) (_wcsnset_s(_Destination,_Destination_size_chars,_Value,_Count)) #define _wcsset_s_l(_Destination,_Destination_size_chars,_Value,_Locale) (_wcsset_s(_Destination,_Destination_size_chars,_Value)) -#else +#else /* _UNICODE */ #define _tprintf_s printf_s #define _tprintf_s_l _printf_s_l @@ -208,28 +209,156 @@ extern "C" { #define _tccpy_s _mbccpy_s #define _tccpy_s_l _mbccpy_s_l -#else - _CRTIMP char *__cdecl _tcsncat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount); - _CRTIMP char *__cdecl _tcsncat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale); - _CRTIMP char *__cdecl _tcsncpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount); - _CRTIMP char *__cdecl _tcsncpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale); - _CRTIMP char *__cdecl _tcstok_s(char *_Str,const char *_Delim,char **_Context); - _CRTIMP char *__cdecl _tcstok_s_l(char *_Str,const char *_Delim,char **_Context,_locale_t _Locale); - _CRTIMP errno_t __cdecl _tcsset_s(char *_Str,size_t _SizeInChars,unsigned int _Val); - _CRTIMP errno_t __cdecl _tcsset_s_l(char *_Str,size_t _SizeInChars,unsigned int,_locale_t _Locale); - _CRTIMP char *__cdecl _tcsnccat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount); - _CRTIMP char *__cdecl _tcsnccat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale); - _CRTIMP char *__cdecl _tcsnccpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount); - _CRTIMP char *__cdecl _tcsnccpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale); - _CRTIMP char *__cdecl _tcslwr_s(char *_Str,size_t _SizeInChars); - _CRTIMP char *__cdecl _tcslwr_s_l(char *_Str,size_t _SizeInChars,_locale_t _Locale); - _CRTIMP char *__cdecl _tcsupr_s(char *_Str,size_t _SizeInChars); - _CRTIMP char *__cdecl _tcsupr_s_l(char *_Str,size_t _SizeInChars,_locale_t _Locale); +#else /* _MB_MAP_DIRECT */ -#endif + _CRTIMP + char * + __cdecl + _tcsncat_s( + _Inout_updates_z_(_DstSizeInChars) char *_Dst, + _In_ size_t _DstSizeInChars, + _In_z_ const char *_Src, + _In_ size_t _MaxCount); -#else + _CRTIMP + char * + __cdecl + _tcsncat_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); + + _CRTIMP + char * + __cdecl + _tcsncpy_s( + _Out_writes_(_DstSizeInChars) char *_Dst, + _In_ size_t _DstSizeInChars, + _In_z_ const char *_Src, + _In_ size_t _MaxCount); + + _CRTIMP + char * + __cdecl + _tcsncpy_s_l( + _Out_writes_(_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 + _tcstok_s( + _Inout_opt_ char *_Str, + _In_z_ const char *_Delim, + _Inout_ _Deref_prepost_opt_z_ char **_Context); + + _Check_return_ + _CRTIMP + char * + __cdecl + _tcstok_s_l( + _Inout_opt_ char *_Str, + _In_z_ const char *_Delim, + _Inout_ _Deref_prepost_opt_z_ char **_Context, + _In_opt_ _locale_t _Locale); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _tcsset_s( + _Inout_updates_z_(_SizeInChars) char *_Str, + _In_ size_t _SizeInChars, + _In_ unsigned int _Val); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _tcsset_s_l( + _Inout_updates_z_(_SizeInChars) char *_Str, + _In_ size_t _SizeInChars, + _In_ unsigned int, + _In_opt_ _locale_t _Locale); + + _CRTIMP + char * + __cdecl + _tcsnccat_s( + _Inout_updates_z_(_DstSizeInChars) char *_Dst, + _In_ size_t _DstSizeInChars, + _In_z_ const char *_Src, + _In_ size_t _MaxCount); + + _CRTIMP + char * + __cdecl + _tcsnccat_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); + + _CRTIMP + char * + __cdecl + _tcsnccpy_s( + _Out_writes_(_DstSizeInChars) char *_Dst, + _In_ size_t _DstSizeInChars, + _In_z_ const char *_Src, + _In_ size_t _MaxCount); + + _CRTIMP + char * + __cdecl + _tcsnccpy_s_l( + _Out_writes_(_DstSizeInChars) char *_Dst, + _In_ size_t _DstSizeInChars, + _In_z_ const char *_Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _CRTIMP + char * + __cdecl + _tcslwr_s( + _Inout_updates_z_(_SizeInChars) char *_Str, + _In_ size_t _SizeInChars); + + _CRTIMP + char * + __cdecl + _tcslwr_s_l( + _Inout_updates_z_(_SizeInChars) char *_Str, + _In_ size_t _SizeInChars, + _In_opt_ _locale_t _Locale); + + _CRTIMP + char * + __cdecl + _tcsupr_s( + _Inout_updates_z_(_SizeInChars) char *_Str, + _In_ size_t _SizeInChars); + + _CRTIMP + char * + __cdecl + _tcsupr_s_l( + _Inout_updates_z_(_SizeInChars) char *_Str, + _In_ size_t _SizeInChars, + _In_opt_ _locale_t _Locale); + +#endif /* _MB_MAP_DIRECT */ + +#else /* _MBCS */ #define _tcsncat_s strncat_s #define _tcsncat_s_l _strncat_s_l @@ -256,11 +385,15 @@ extern "C" { #define _strnset_s_l(_Destination,_Destination_size_chars,_Value,_Count,_Locale) (_strnset_s(_Destination,_Destination_size_chars,_Value,_Count)) #define _strset_s_l(_Destination,_Destination_size_chars,_Value,_Locale) (_strset_s(_Destination,_Destination_size_chars,_Value)) -#endif -#endif + +#endif /* _MBCS */ + +#endif /* _UNICODE */ #ifdef __cplusplus } #endif -#endif -#endif + +#endif /* MINGW_HAS_SECURE_API */ + +#endif /* _INC_TCHAR_S */ From f8eed818268414ab7bca1fc03e9f674728f9291e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 10 Aug 2013 23:31:33 +0000 Subject: [PATCH 07/68] [PSDK] * Remove redundant GetUserDefaultUILanguage() declaration. svn path=/trunk/; revision=59695 --- reactos/include/psdk/winnls.h | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/include/psdk/winnls.h b/reactos/include/psdk/winnls.h index 4b1a9c328f5..4ef122053d6 100644 --- a/reactos/include/psdk/winnls.h +++ b/reactos/include/psdk/winnls.h @@ -824,7 +824,6 @@ int WINAPI GetTimeFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,int); int WINAPI GetTimeFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,int); LANGID WINAPI GetUserDefaultLangID(void); LCID WINAPI GetUserDefaultLCID(void); -LANGID WINAPI GetUserDefaultUILanguage(void); GEOID WINAPI GetUserGeoID(_In_ GEOCLASS); BOOL WINAPI IsDBCSLeadByte(_In_ BYTE); BOOL WINAPI IsDBCSLeadByteEx(_In_ UINT, _In_ BYTE); From 73319cc61a48dd903b95ef79cecf95daef91a357 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 11 Aug 2013 14:40:52 +0000 Subject: [PATCH 08/68] [PSDK] * Annotate mmsystem.h. svn path=/trunk/; revision=59696 --- reactos/include/psdk/mmsystem.h | 825 ++++++++++++++++++++++++++------ 1 file changed, 671 insertions(+), 154 deletions(-) diff --git a/reactos/include/psdk/mmsystem.h b/reactos/include/psdk/mmsystem.h index 3f0996e8714..f86b2928553 100644 --- a/reactos/include/psdk/mmsystem.h +++ b/reactos/include/psdk/mmsystem.h @@ -1702,194 +1702,711 @@ typedef struct tagMCI_WAVE_SET_PARMS { WORD wReserved5; } MCI_WAVE_SET_PARMS,*PMCI_WAVE_SET_PARMS,*LPMCI_WAVE_SET_PARMS; -LRESULT WINAPI CloseDriver(HDRVR,LPARAM,LPARAM); -HDRVR WINAPI OpenDriver(LPCWSTR,LPCWSTR,LPARAM); -LRESULT WINAPI SendDriverMessage(HDRVR,UINT,LPARAM,LPARAM); -HMODULE WINAPI DrvGetModuleHandle(HDRVR); -HMODULE WINAPI GetDriverModuleHandle(HDRVR); -LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM); +LRESULT WINAPI CloseDriver(_In_ HDRVR, _In_ LPARAM, _In_ LPARAM); +HDRVR WINAPI OpenDriver(_In_ LPCWSTR, _In_ LPCWSTR, _In_ LPARAM); +LRESULT WINAPI SendDriverMessage(_In_ HDRVR, _In_ UINT, _In_ LPARAM, _In_ LPARAM); +HMODULE WINAPI DrvGetModuleHandle(_In_ HDRVR); +HMODULE WINAPI GetDriverModuleHandle(_In_ HDRVR); + +LRESULT +WINAPI +DefDriverProc( + _In_ DWORD_PTR, + _In_ HDRVR, + _In_ UINT, + _In_ LPARAM, + _In_ LPARAM); + UINT WINAPI mmsystemGetVersion(void); #define OutputDebugStr OutputDebugString -BOOL WINAPI sndPlaySoundA(LPCSTR,UINT); -BOOL WINAPI sndPlaySoundW(LPCWSTR,UINT); -BOOL WINAPI PlaySoundA(LPCSTR,HMODULE,DWORD); -BOOL WINAPI PlaySoundW(LPCWSTR,HMODULE,DWORD); +BOOL WINAPI sndPlaySoundA(_In_opt_ LPCSTR, _In_ UINT); +BOOL WINAPI sndPlaySoundW(_In_opt_ LPCWSTR, _In_ UINT); +BOOL WINAPI PlaySoundA(_In_opt_ LPCSTR, _In_opt_ HMODULE, _In_ DWORD); +BOOL WINAPI PlaySoundW(_In_opt_ LPCWSTR, _In_opt_ HMODULE, _In_ DWORD); UINT WINAPI waveOutGetNumDevs(void); -MMRESULT WINAPI waveOutGetDevCapsA(UINT_PTR,LPWAVEOUTCAPSA,UINT); -MMRESULT WINAPI waveOutGetDevCapsW(UINT_PTR,LPWAVEOUTCAPSW,UINT); -MMRESULT WINAPI waveOutGetVolume(HWAVEOUT,PDWORD); -MMRESULT WINAPI waveOutSetVolume(HWAVEOUT,DWORD); -MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT,LPSTR,UINT); -MMRESULT WINAPI waveOutGetErrorTextW(MMRESULT,LPWSTR,UINT); -MMRESULT WINAPI waveOutOpen(LPHWAVEOUT,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD); -MMRESULT WINAPI waveOutClose(HWAVEOUT); -MMRESULT WINAPI waveOutPrepareHeader(HWAVEOUT,LPWAVEHDR,UINT); -MMRESULT WINAPI waveOutUnprepareHeader(HWAVEOUT,LPWAVEHDR,UINT); -MMRESULT WINAPI waveOutWrite(HWAVEOUT,LPWAVEHDR,UINT); -MMRESULT WINAPI waveOutPause(HWAVEOUT); -MMRESULT WINAPI waveOutRestart(HWAVEOUT); -MMRESULT WINAPI waveOutReset(HWAVEOUT); -MMRESULT WINAPI waveOutBreakLoop(HWAVEOUT); -MMRESULT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT); -MMRESULT WINAPI waveOutGetPitch(HWAVEOUT,PDWORD); -MMRESULT WINAPI waveOutSetPitch(HWAVEOUT,DWORD); -MMRESULT WINAPI waveOutGetPlaybackRate(HWAVEOUT,PDWORD); -MMRESULT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD); -MMRESULT WINAPI waveOutGetID(HWAVEOUT,LPUINT); +MMRESULT WINAPI waveOutGetDevCapsA(_In_ UINT_PTR, _Out_ LPWAVEOUTCAPSA, _In_ UINT); +MMRESULT WINAPI waveOutGetDevCapsW(_In_ UINT_PTR, _Out_ LPWAVEOUTCAPSW, _In_ UINT); +MMRESULT WINAPI waveOutGetVolume(_In_opt_ HWAVEOUT, _Out_ PDWORD); +MMRESULT WINAPI waveOutSetVolume(_In_opt_ HWAVEOUT, _In_ DWORD); + +MMRESULT +WINAPI +waveOutGetErrorTextA( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +waveOutGetErrorTextW( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPWSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +waveOutOpen( + _Out_opt_ LPHWAVEOUT, + _In_ UINT, + _In_ LPCWAVEFORMATEX, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR, + _In_ DWORD); + +MMRESULT WINAPI waveOutClose(_In_ HWAVEOUT); + +MMRESULT +WINAPI +waveOutPrepareHeader( + _In_ HWAVEOUT hwo, + _Inout_updates_bytes_(cbwh) LPWAVEHDR pwh, + _In_ UINT cbwh); + +MMRESULT +WINAPI +waveOutUnprepareHeader( + _In_ HWAVEOUT hwo, + _Inout_updates_bytes_(cbwh) LPWAVEHDR pwh, + _In_ UINT cbwh); + +MMRESULT +WINAPI +waveOutWrite( + _In_ HWAVEOUT hwo, + _Inout_updates_bytes_(cbwh) LPWAVEHDR pwh, + _In_ UINT cbwh); + +MMRESULT WINAPI waveOutPause(_In_ HWAVEOUT); +MMRESULT WINAPI waveOutRestart(_In_ HWAVEOUT); +MMRESULT WINAPI waveOutReset(_In_ HWAVEOUT); +MMRESULT WINAPI waveOutBreakLoop(_In_ HWAVEOUT); + +MMRESULT +WINAPI +waveOutGetPosition( + _In_ HWAVEOUT hwo, + _Inout_updates_bytes_(cbmmt) LPMMTIME pmmt, + _In_ UINT cbmmt); + +MMRESULT WINAPI waveOutGetPitch(_In_ HWAVEOUT, _Out_ PDWORD); +MMRESULT WINAPI waveOutSetPitch(_In_ HWAVEOUT, _In_ DWORD); +MMRESULT WINAPI waveOutGetPlaybackRate(_In_ HWAVEOUT, _Out_ PDWORD); +MMRESULT WINAPI waveOutSetPlaybackRate(_In_ HWAVEOUT, _In_ DWORD); +MMRESULT WINAPI waveOutGetID(_In_ HWAVEOUT, _Out_ LPUINT); + #if (WINVER >= 0x030a) #ifdef _WIN32 -MMRESULT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD_PTR,DWORD_PTR); +MMRESULT WINAPI waveOutMessage(_In_opt_ HWAVEOUT, _In_ UINT, _In_ DWORD_PTR, _In_ DWORD_PTR); #else DWORD WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD); #endif #endif + UINT WINAPI waveInGetNumDevs(void); -MMRESULT WINAPI waveInGetDevCapsA(UINT_PTR,LPWAVEINCAPSA,UINT); -MMRESULT WINAPI waveInGetDevCapsW(UINT_PTR,LPWAVEINCAPSW,UINT); -MMRESULT WINAPI waveInGetErrorTextA(MMRESULT,LPSTR,UINT); -MMRESULT WINAPI waveInGetErrorTextW(MMRESULT,LPWSTR,UINT); -MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD); -MMRESULT WINAPI waveInClose(HWAVEIN); -MMRESULT WINAPI waveInPrepareHeader(HWAVEIN,LPWAVEHDR,UINT); -MMRESULT WINAPI waveInUnprepareHeader(HWAVEIN,LPWAVEHDR,UINT); -MMRESULT WINAPI waveInAddBuffer(HWAVEIN,LPWAVEHDR,UINT); -MMRESULT WINAPI waveInStart(HWAVEIN); -MMRESULT WINAPI waveInStop(HWAVEIN); -MMRESULT WINAPI waveInReset(HWAVEIN); -MMRESULT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT); -MMRESULT WINAPI waveInGetID(HWAVEIN,LPUINT); + +MMRESULT +WINAPI +waveInGetDevCapsA( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbwic) LPWAVEINCAPSA pwic, + _In_ UINT cbwic); + +MMRESULT +WINAPI +waveInGetDevCapsW( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbwic) LPWAVEINCAPSW pwic, + _In_ UINT cbwic); + +MMRESULT +WINAPI +waveInGetErrorTextA( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +waveInGetErrorTextW( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPWSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +waveInOpen( + _Out_opt_ LPHWAVEIN, + _In_ UINT, + _In_ LPCWAVEFORMATEX, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR, + _In_ DWORD); + +MMRESULT WINAPI waveInClose(_In_ HWAVEIN); + +MMRESULT +WINAPI +waveInPrepareHeader( + _In_ HWAVEIN hwi, + _Inout_updates_bytes_(cbwh) LPWAVEHDR pwh, + _In_ UINT cbwh); + +MMRESULT +WINAPI +waveInUnprepareHeader( + _In_ HWAVEIN hwi, + _Inout_updates_bytes_(cbwh) LPWAVEHDR pwh, + _In_ UINT cbwh); + +MMRESULT +WINAPI +waveInAddBuffer( + _In_ HWAVEIN hwi, + _Inout_updates_bytes_(cbwh) LPWAVEHDR pwh, + _In_ UINT cbwh); + +MMRESULT WINAPI waveInStart(_In_ HWAVEIN); +MMRESULT WINAPI waveInStop(_In_ HWAVEIN); +MMRESULT WINAPI waveInReset(_In_ HWAVEIN); + +MMRESULT +WINAPI +waveInGetPosition( + _In_ HWAVEIN hwi, + _Inout_updates_bytes_(cbmmt) LPMMTIME pmmt, + _In_ UINT cbmmt); + +MMRESULT WINAPI waveInGetID(_In_ HWAVEIN, _In_ LPUINT); + #if (WINVER >= 0x030a) #ifdef _WIN32 -MMRESULT WINAPI waveInMessage(HWAVEIN,UINT,DWORD_PTR,DWORD_PTR); +MMRESULT WINAPI waveInMessage(_In_opt_ HWAVEIN, _In_ UINT, _In_opt_ DWORD_PTR, _In_opt_ DWORD_PTR); #else DWORD WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD); #endif #endif UINT WINAPI midiOutGetNumDevs(void); -MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD_PTR,DWORD_PTR,DWORD); -MMRESULT WINAPI midiStreamClose(HMIDISTRM); -MMRESULT WINAPI midiStreamProperty(HMIDISTRM,LPBYTE,DWORD); -MMRESULT WINAPI midiStreamPosition(HMIDISTRM,LPMMTIME,UINT); -MMRESULT WINAPI midiStreamOut(HMIDISTRM,LPMIDIHDR,UINT); -MMRESULT WINAPI midiStreamPause(HMIDISTRM); -MMRESULT WINAPI midiStreamRestart(HMIDISTRM); -MMRESULT WINAPI midiStreamStop(HMIDISTRM); -MMRESULT WINAPI midiConnect(HMIDI,HMIDIOUT,PVOID); -MMRESULT WINAPI midiDisconnect(HMIDI,HMIDIOUT,PVOID); -MMRESULT WINAPI midiOutGetDevCapsA(UINT_PTR,LPMIDIOUTCAPSA,UINT); -MMRESULT WINAPI midiOutGetDevCapsW(UINT_PTR,LPMIDIOUTCAPSW,UINT); -MMRESULT WINAPI midiOutGetVolume(HMIDIOUT,PDWORD); -MMRESULT WINAPI midiOutSetVolume(HMIDIOUT,DWORD); -MMRESULT WINAPI midiOutGetErrorTextA(MMRESULT,LPSTR,UINT); -MMRESULT WINAPI midiOutGetErrorTextW(MMRESULT,LPWSTR,UINT); -MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD_PTR,DWORD_PTR,DWORD); -MMRESULT WINAPI midiOutClose(HMIDIOUT); -MMRESULT WINAPI midiOutPrepareHeader(HMIDIOUT,LPMIDIHDR,UINT); -MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT,LPMIDIHDR,UINT); -MMRESULT WINAPI midiOutShortMsg(HMIDIOUT,DWORD); -MMRESULT WINAPI midiOutLongMsg(HMIDIOUT,LPMIDIHDR,UINT); -MMRESULT WINAPI midiOutReset(HMIDIOUT); -MMRESULT WINAPI midiOutCachePatches(HMIDIOUT,UINT,LPWORD,UINT); -MMRESULT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,LPWORD,UINT); -MMRESULT WINAPI midiOutGetID(HMIDIOUT,LPUINT); + +MMRESULT +WINAPI +midiStreamOpen( + _Out_ LPHMIDISTRM phms, + _Inout_updates_(cMidi) LPUINT puDeviceID, + _In_ DWORD cMidi, + _In_opt_ DWORD_PTR dwCallback, + _In_opt_ DWORD_PTR dwInstance, + _In_ DWORD fdwOpen); + +MMRESULT WINAPI midiStreamClose(_In_ HMIDISTRM); + +MMRESULT +WINAPI +midiStreamProperty( + _In_ HMIDISTRM hms, + _Inout_updates_bytes_(sizeof(DWORD) + sizeof(DWORD)) LPBYTE lppropdata, + _In_ DWORD dwProperty); + +MMRESULT +WINAPI +midiStreamPosition( + _In_ HMIDISTRM hms, + _Out_writes_bytes_(cbmmt) LPMMTIME lpmmt, + _In_ UINT cbmmt); + +MMRESULT +WINAPI +midiStreamOut( + _In_ HMIDISTRM hms, + _Out_writes_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT WINAPI midiStreamPause(_In_ HMIDISTRM); +MMRESULT WINAPI midiStreamRestart(_In_ HMIDISTRM); +MMRESULT WINAPI midiStreamStop(_In_ HMIDISTRM); +MMRESULT WINAPI midiConnect(_In_ HMIDI, _In_ HMIDIOUT, _In_opt_ PVOID); +MMRESULT WINAPI midiDisconnect(_In_ HMIDI, _In_ HMIDIOUT, _In_opt_ PVOID); + +MMRESULT +WINAPI +midiOutGetDevCapsA( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbmoc) LPMIDIOUTCAPSA pmoc, + _In_ UINT cbmoc); + +MMRESULT +WINAPI +midiOutGetDevCapsW( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbmoc) LPMIDIOUTCAPSW pmoc, + _In_ UINT cbmoc); + +MMRESULT WINAPI midiOutGetVolume(_In_opt_ HMIDIOUT, _Out_ PDWORD); +MMRESULT WINAPI midiOutSetVolume(_In_opt_ HMIDIOUT, _In_ DWORD); + +MMRESULT +WINAPI +midiOutGetErrorTextA( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +midiOutGetErrorTextW( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPWSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +midiOutOpen( + _Out_ LPHMIDIOUT, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR, + _In_ DWORD); + +MMRESULT WINAPI midiOutClose(_In_ HMIDIOUT); + +MMRESULT +WINAPI +midiOutPrepareHeader( + _In_ HMIDIOUT hmo, + _Inout_updates_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT +WINAPI +midiOutUnprepareHeader( + _In_ HMIDIOUT hmo, + _Inout_updates_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT WINAPI midiOutShortMsg(_In_ HMIDIOUT, _In_ DWORD); + +MMRESULT +WINAPI +midiOutLongMsg( + _In_ HMIDIOUT hmo, + _In_reads_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT WINAPI midiOutReset(_In_ HMIDIOUT); + +MMRESULT +WINAPI +midiOutCachePatches( + _In_ HMIDIOUT hmo, + _In_ UINT uBank, + _In_reads_(MIDIPATCHSIZE) LPWORD pwpa, + _In_ UINT fuCache); + +MMRESULT +WINAPI +midiOutCacheDrumPatches( + _In_ HMIDIOUT hmo, + _In_ UINT uPatch, + _In_reads_(MIDIPATCHSIZE) LPWORD pwkya, + _In_ UINT fuCache); + +MMRESULT WINAPI midiOutGetID(_In_ HMIDIOUT, _Out_ LPUINT); + #if (WINVER >= 0x030a) #ifdef _WIN32 -MMRESULT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD_PTR,DWORD_PTR); +MMRESULT WINAPI midiOutMessage(_In_opt_ HMIDIOUT, _In_ UINT, _In_opt_ DWORD_PTR, _In_opt_ DWORD_PTR); #else DWORD WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD); #endif #endif + UINT WINAPI midiInGetNumDevs(void); -MMRESULT WINAPI midiInGetDevCapsA(UINT_PTR,LPMIDIINCAPSA,UINT); -MMRESULT WINAPI midiInGetDevCapsW(UINT_PTR,LPMIDIINCAPSW,UINT); -MMRESULT WINAPI midiInGetErrorTextA(MMRESULT,LPSTR,UINT); -MMRESULT WINAPI midiInGetErrorTextW(MMRESULT,LPWSTR,UINT); -MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD_PTR,DWORD_PTR,DWORD); -MMRESULT WINAPI midiInClose(HMIDIIN); -MMRESULT WINAPI midiInPrepareHeader(HMIDIIN,LPMIDIHDR,UINT); -MMRESULT WINAPI midiInUnprepareHeader(HMIDIIN,LPMIDIHDR,UINT); -MMRESULT WINAPI midiInAddBuffer(HMIDIIN,LPMIDIHDR,UINT); -MMRESULT WINAPI midiInStart(HMIDIIN); -MMRESULT WINAPI midiInStop(HMIDIIN); -MMRESULT WINAPI midiInReset(HMIDIIN); -MMRESULT WINAPI midiInGetID(HMIDIIN,LPUINT); + +MMRESULT +WINAPI +midiInGetDevCapsA( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbmic) LPMIDIINCAPSA pmic, + _In_ UINT cbmic); + +MMRESULT +WINAPI +midiInGetDevCapsW( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbmic) LPMIDIINCAPSW pmic, + _In_ UINT cbmic); + +MMRESULT +WINAPI +midiInGetErrorTextA( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +midiInGetErrorTextW( + _In_ MMRESULT mmrError, + _Out_writes_(cchText) LPWSTR pszText, + _In_ UINT cchText); + +MMRESULT +WINAPI +midiInOpen( + _Out_ LPHMIDIIN, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR, + _In_ DWORD); + +MMRESULT WINAPI midiInClose(_In_ HMIDIIN); + +MMRESULT +WINAPI +midiInPrepareHeader( + _In_ HMIDIIN hmi, + _Inout_updates_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT +WINAPI +midiInUnprepareHeader( + _In_ HMIDIIN hmi, + _Inout_updates_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT +WINAPI +midiInAddBuffer( + _In_ HMIDIIN hmi, + _Out_writes_bytes_(cbmh) LPMIDIHDR pmh, + _In_ UINT cbmh); + +MMRESULT WINAPI midiInStart(_In_ HMIDIIN); +MMRESULT WINAPI midiInStop(_In_ HMIDIIN); +MMRESULT WINAPI midiInReset(_In_ HMIDIIN); +MMRESULT WINAPI midiInGetID(_In_ HMIDIIN, _Out_ LPUINT); + #if (WINVER >= 0x030a) #ifdef _WIN32 -MMRESULT WINAPI midiInMessage(HMIDIIN,UINT,DWORD_PTR,DWORD_PTR); +MMRESULT WINAPI midiInMessage(_In_opt_ HMIDIIN, _In_ UINT, _In_opt_ DWORD_PTR, _In_opt_ DWORD_PTR); #else DWORD WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD); #endif #endif + UINT WINAPI auxGetNumDevs(void); -MMRESULT WINAPI auxGetDevCapsA(UINT_PTR,LPAUXCAPSA,UINT); -MMRESULT WINAPI auxGetDevCapsW(UINT_PTR,LPAUXCAPSW,UINT); -MMRESULT WINAPI auxSetVolume(UINT,DWORD); -MMRESULT WINAPI auxGetVolume(UINT,PDWORD); -MMRESULT WINAPI auxOutMessage(UINT,UINT,DWORD_PTR,DWORD_PTR); + +MMRESULT +WINAPI +auxGetDevCapsA( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbac) LPAUXCAPSA pac, + _In_ UINT cbac); + +MMRESULT +WINAPI +auxGetDevCapsW( + _In_ UINT_PTR uDeviceID, + _Out_writes_bytes_(cbac) LPAUXCAPSW pac, + _In_ UINT cbac); + +MMRESULT WINAPI auxSetVolume(_In_ UINT, _In_ DWORD); +MMRESULT WINAPI auxGetVolume(_In_ UINT, _Out_ PDWORD); + +MMRESULT +WINAPI +auxOutMessage( + _In_ UINT, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR); + UINT WINAPI mixerGetNumDevs(void); -MMRESULT WINAPI mixerGetDevCapsA(UINT_PTR,LPMIXERCAPSA,UINT); -MMRESULT WINAPI mixerGetDevCapsW(UINT_PTR,LPMIXERCAPSW,UINT); -MMRESULT WINAPI mixerOpen(LPHMIXER,UINT,DWORD_PTR,DWORD_PTR,DWORD); -MMRESULT WINAPI mixerClose(HMIXER); -DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD_PTR,DWORD_PTR); -MMRESULT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD); -MMRESULT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD); -MMRESULT WINAPI mixerGetID(HMIXEROBJ,PUINT,DWORD); -MMRESULT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD); -MMRESULT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD); -MMRESULT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); -MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); -MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); -MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT); + +MMRESULT +WINAPI +mixerGetDevCapsA( + _In_ UINT_PTR uMxId, + _Out_writes_bytes_(cbmxcaps) LPMIXERCAPSA pmxcaps, + _In_ UINT cbmxcaps); + +MMRESULT +WINAPI +mixerGetDevCapsW( + _In_ UINT_PTR uMxId, + _Out_writes_bytes_(cbmxcaps) LPMIXERCAPSW pmxcaps, + _In_ UINT cbmxcaps); + +MMRESULT +WINAPI +mixerOpen( + _Out_opt_ LPHMIXER, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR, + _In_ DWORD); + +MMRESULT WINAPI mixerClose(_In_ HMIXER); + +DWORD +WINAPI +mixerMessage( + _In_opt_ HMIXER, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR); + +MMRESULT +WINAPI +mixerGetLineInfoA( + _In_opt_ HMIXEROBJ, + _Inout_ LPMIXERLINEA, + _In_ DWORD); + +MMRESULT +WINAPI +mixerGetLineInfoW( + _In_opt_ HMIXEROBJ, + _Inout_ LPMIXERLINEW, + _In_ DWORD); + +MMRESULT WINAPI mixerGetID(_In_opt_ HMIXEROBJ, _Out_ PUINT, _In_ DWORD); + +MMRESULT +WINAPI +mixerGetLineControlsA( + _In_opt_ HMIXEROBJ, + _Inout_ LPMIXERLINECONTROLSA, + _In_ DWORD); + +MMRESULT +WINAPI +mixerGetLineControlsW( + _In_opt_ HMIXEROBJ, + _Inout_ LPMIXERLINECONTROLSW, + _In_ DWORD); + +MMRESULT +WINAPI +mixerGetControlDetailsA( + _In_opt_ HMIXEROBJ, + _Inout_ LPMIXERCONTROLDETAILS, + _In_ DWORD); + +MMRESULT +WINAPI +mixerGetControlDetailsW( + _In_opt_ HMIXEROBJ, + _Inout_ LPMIXERCONTROLDETAILS, + _In_ DWORD); + +MMRESULT +WINAPI +mixerSetControlDetails( + _In_opt_ HMIXEROBJ, + _In_ LPMIXERCONTROLDETAILS, + _In_ DWORD); + +MMRESULT +WINAPI +timeGetSystemTime( + _Out_writes_bytes_(cbmmt) LPMMTIME pmmt, + _In_ UINT cbmmt); + DWORD WINAPI timeGetTime(void); -MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD_PTR,UINT); -MMRESULT WINAPI timeKillEvent(UINT); -MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT); -MMRESULT WINAPI timeBeginPeriod(UINT); -MMRESULT WINAPI timeEndPeriod(UINT); + +MMRESULT +WINAPI +timeSetEvent( + _In_ UINT, + _In_ UINT, + _In_ LPTIMECALLBACK, + _In_ DWORD_PTR, + _In_ UINT); + +MMRESULT WINAPI timeKillEvent(_In_ UINT); + +MMRESULT +WINAPI +timeGetDevCaps( + _Out_writes_bytes_(cbtc) LPTIMECAPS ptc, + _In_ UINT cbtc); + +MMRESULT WINAPI timeBeginPeriod(_In_ UINT); +MMRESULT WINAPI timeEndPeriod(_In_ UINT); UINT WINAPI joyGetNumDevs(void); -MMRESULT WINAPI joyGetDevCapsA(UINT_PTR,LPJOYCAPSA,UINT); -MMRESULT WINAPI joyGetDevCapsW(UINT_PTR,LPJOYCAPSW,UINT); -MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO); -MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX); -MMRESULT WINAPI joyGetThreshold(UINT,LPUINT); -MMRESULT WINAPI joyReleaseCapture(UINT); -MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL); -MMRESULT WINAPI joySetThreshold(UINT,UINT); -FOURCC WINAPI mmioStringToFOURCCA(LPCSTR,UINT); -FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR,UINT); -LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD); -LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD); -HMMIO WINAPI mmioOpenA(LPSTR,LPMMIOINFO,DWORD); -HMMIO WINAPI mmioOpenW(LPWSTR,LPMMIOINFO,DWORD); -MMRESULT WINAPI mmioRenameA(LPCSTR,LPCSTR,LPCMMIOINFO,DWORD); -MMRESULT WINAPI mmioRenameW(LPCWSTR,LPCWSTR,LPCMMIOINFO,DWORD); -MMRESULT WINAPI mmioClose(HMMIO,UINT); -LONG WINAPI mmioRead(HMMIO,HPSTR,LONG); -LONG WINAPI mmioWrite(HMMIO,LPCSTR,LONG); -LONG WINAPI mmioSeek(HMMIO,LONG,int); -MMRESULT WINAPI mmioGetInfo(HMMIO,LPMMIOINFO,UINT); -MMRESULT WINAPI mmioSetInfo(HMMIO,LPCMMIOINFO,UINT); -MMRESULT WINAPI mmioSetBuffer(HMMIO,LPSTR,LONG,UINT); -MMRESULT WINAPI mmioFlush(HMMIO,UINT); -MMRESULT WINAPI mmioAdvance(HMMIO,LPMMIOINFO,UINT); -LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM); -MMRESULT WINAPI mmioDescend(HMMIO,LPMMCKINFO,const MMCKINFO*,UINT); -MMRESULT WINAPI mmioAscend(HMMIO,LPMMCKINFO,UINT); -MMRESULT WINAPI mmioCreateChunk(HMMIO,LPMMCKINFO,UINT); -MCIERROR WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR); -MCIERROR WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR); -MCIERROR WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND); -MCIERROR WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND); -MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR); -MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR); -MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD,LPCSTR); -MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR); -BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT); -BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT); -BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD); -HTASK WINAPI mciGetCreatorTask(MCIDEVICEID); -YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,PDWORD); + +MMRESULT +WINAPI +joyGetDevCapsA( + _In_ UINT_PTR uJoyID, + _Out_writes_bytes_(cbjc) LPJOYCAPSA pjc, + _In_ UINT cbjc); + +MMRESULT +WINAPI +joyGetDevCapsW( + _In_ UINT_PTR uJoyID, + _Out_writes_bytes_(cbjc) LPJOYCAPSW pjc, + _In_ UINT cbjc); + +MMRESULT WINAPI joyGetPos(_In_ UINT, _Out_ LPJOYINFO); +MMRESULT WINAPI joyGetPosEx(_In_ UINT, _Out_ LPJOYINFOEX); +MMRESULT WINAPI joyGetThreshold(_In_ UINT, _Out_ LPUINT); +MMRESULT WINAPI joyReleaseCapture(_In_ UINT); +MMRESULT WINAPI joySetCapture(_In_ HWND, _In_ UINT, _In_ UINT, _In_ BOOL); +MMRESULT WINAPI joySetThreshold(_In_ UINT, _In_ UINT); +FOURCC WINAPI mmioStringToFOURCCA(LPCSTR, _In_ UINT); +FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR, _In_ UINT); + +LPMMIOPROC +WINAPI +mmioInstallIOProcA( + _In_ FOURCC, + _In_opt_ LPMMIOPROC, + _In_ DWORD); + +LPMMIOPROC +WINAPI +mmioInstallIOProcW( + _In_ FOURCC, + _In_opt_ LPMMIOPROC, + _In_ DWORD); + +HMMIO +WINAPI +mmioOpenA( + _Inout_updates_bytes_opt_(128) LPSTR pszFileName, + _Inout_opt_ LPMMIOINFO pmmioinfo, + _In_ DWORD fdwOpen); + +HMMIO +WINAPI +mmioOpenW( + _Inout_updates_bytes_opt_(128) LPWSTR pszFileName, + _Inout_opt_ LPMMIOINFO pmmioinfo, + _In_ DWORD fdwOpen); + +MMRESULT +WINAPI +mmioRenameA( + _In_ LPCSTR, + _In_ LPCSTR, + _In_opt_ LPCMMIOINFO, + _In_ DWORD); + +MMRESULT +WINAPI +mmioRenameW( + _In_ LPCWSTR, + _In_ LPCWSTR, + _In_opt_ LPCMMIOINFO, + _In_ DWORD); + +MMRESULT WINAPI mmioClose(_In_ HMMIO, _In_ UINT); + +LONG +WINAPI +mmioRead( + _In_ HMMIO hmmio, + _Out_writes_bytes_(cch) HPSTR pch, + _In_ LONG cch); + +LONG +WINAPI +mmioWrite( + _In_ HMMIO hmmio, + _In_reads_bytes_(cch) const char _huge * pch, + _In_ LONG cch); + +LONG WINAPI mmioSeek(_In_ HMMIO, _In_ LONG, _In_ int); +MMRESULT WINAPI mmioGetInfo(_In_ HMMIO, _Out_ LPMMIOINFO, _In_ UINT); +MMRESULT WINAPI mmioSetInfo(_In_ HMMIO, _In_ LPCMMIOINFO, _In_ UINT); + +MMRESULT +WINAPI +mmioSetBuffer( + _In_ HMMIO hmmio, + _Out_writes_opt_(cchBuffer) LPSTR pchBuffer, + _In_ LONG cchBuffer, + _In_ UINT fuBuffer); + +MMRESULT WINAPI mmioFlush(_In_ HMMIO, _In_ UINT); +MMRESULT WINAPI mmioAdvance(_In_ HMMIO, _In_opt_ LPMMIOINFO, _In_ UINT); + +LRESULT +WINAPI +mmioSendMessage( + _In_ HMMIO, + _In_ UINT, + _In_opt_ LPARAM, + _In_opt_ LPARAM); + +MMRESULT +WINAPI +mmioDescend( + _In_ HMMIO, + _Inout_ LPMMCKINFO, + _In_opt_ const MMCKINFO*, + _In_ UINT); + +MMRESULT WINAPI mmioAscend(_In_ HMMIO, _In_ LPMMCKINFO, _In_ UINT); +MMRESULT WINAPI mmioCreateChunk(_In_ HMMIO, _In_ LPMMCKINFO, _In_ UINT); + +MCIERROR +WINAPI +mciSendCommandA( + _In_ MCIDEVICEID, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR); + +MCIERROR +WINAPI +mciSendCommandW( + _In_ MCIDEVICEID, + _In_ UINT, + _In_opt_ DWORD_PTR, + _In_opt_ DWORD_PTR); + +MCIERROR +WINAPI +mciSendStringA( + _In_ LPCSTR lpstrCommand, + _Out_writes_opt_(uReturnLength) LPSTR lpstrReturnString, + _In_ UINT uReturnLength, + _In_opt_ HWND hwndCallback); + +MCIERROR +WINAPI +mciSendStringW( + _In_ LPCWSTR lpstrCommand, + _Out_writes_opt_(uReturnLength) LPWSTR lpstrReturnString, + _In_ UINT uReturnLength, + _In_opt_ HWND hwndCallback); + +MCIDEVICEID WINAPI mciGetDeviceIDA(_In_ LPCSTR); +MCIDEVICEID WINAPI mciGetDeviceIDW(_In_ LPCWSTR); +MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(_In_ DWORD, _In_ LPCSTR); +MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(_In_ DWORD, _In_ LPCWSTR); + +BOOL +WINAPI +mciGetErrorStringA( + _In_ MCIERROR mcierr, + _Out_writes_(cchText) LPSTR pszText, + _In_ UINT cchText); + +BOOL +WINAPI +mciGetErrorStringW( + _In_ MCIERROR mcierr, + _Out_writes_(cchText) LPWSTR pszText, + _In_ UINT cchText); + +BOOL WINAPI mciSetYieldProc(_In_ MCIDEVICEID, _In_opt_ YIELDPROC, _In_ DWORD); +HTASK WINAPI mciGetCreatorTask(_In_ MCIDEVICEID); +YIELDPROC WINAPI mciGetYieldProc(_In_ MCIDEVICEID, _In_ PDWORD); #ifdef _WINE DWORD WINAPI GetDriverFlags(HDRVR hDriver); From 4df1a905ab59fbbd4a13f4ace0c05a586e39ee82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 11 Aug 2013 17:06:19 +0000 Subject: [PATCH 09/68] =?UTF-8?q?[KERNEL32]=20Fix=20the=20prototype=20of?= =?UTF-8?q?=20the=20undocumented=20function=20SetConsolePalette=20(see=20h?= =?UTF-8?q?ttp://comments.gmane.org/gmane.comp.lang.harbour.devel/27844=20?= =?UTF-8?q?and=20https://github.com/harbour/core/commit/d79a1b7b812cbde6dd?= =?UTF-8?q?f718ebfd6939a24f633e52=20for=20a=20usage=20example);=20tested?= =?UTF-8?q?=20by=20Mysoft=20a.k.a.=20Gr=C3=A9gory=20Macario=20Harbs.=20Nee?= =?UTF-8?q?ded=20for=20modifying=20VGA=20palettes=20for=20NTVDM.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=59697 --- reactos/dll/win32/kernel32/client/console/console.c | 13 ++++++++----- reactos/include/psdk/wincon.h | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/kernel32/client/console/console.c b/reactos/dll/win32/kernel32/client/console/console.c index ddb7bdf6eb3..6b438749149 100644 --- a/reactos/dll/win32/kernel32/client/console/console.c +++ b/reactos/dll/win32/kernel32/client/console/console.c @@ -712,16 +712,19 @@ SetConsoleMenuClose(BOOL bEnable) /* * @unimplemented (Undocumented) + * @note See http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 + * Usage example: https://github.com/harbour/core/commit/d79a1b7b812cbde6ddf718ebfd6939a24f633e52 */ BOOL WINAPI -SetConsolePalette(DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2) +SetConsolePalette(HANDLE hConsoleOutput, + HPALETTE hPalette, + UINT dwUsage) { - DPRINT1("SetConsolePalette(0x%x, 0x%x, 0x%x) UNIMPLEMENTED!\n", Unknown0, Unknown1, Unknown2); + DPRINT1("SetConsolePalette(0x%x, 0x%x, %d) UNIMPLEMENTED!\n", hConsoleOutput, hPalette, dwUsage); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + // Return TRUE so that we don't fail when being used by NTVDM even if not implemented. + return TRUE; } /* diff --git a/reactos/include/psdk/wincon.h b/reactos/include/psdk/wincon.h index 11744dd3d9c..65528546555 100644 --- a/reactos/include/psdk/wincon.h +++ b/reactos/include/psdk/wincon.h @@ -473,6 +473,8 @@ BOOL WINAPI SetConsoleMenuClose(_In_ BOOL); BOOL WINAPI SetConsoleCursor(_In_ HANDLE, _In_ HCURSOR); /* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ShowConsoleCursor.php */ 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); From fb58b492f618ee5c49fb3965e518f3375e5c42b6 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 11 Aug 2013 17:49:17 +0000 Subject: [PATCH 10/68] [SETUPAPI] - Pass the CM_CREATE_DEVINST_GENERATE_ID flag to CM_Create_DevInst_ExW if DICD_GENERATE_ID was used - Currently unimplemented in umpnpmgr svn path=/trunk/; revision=59698 --- reactos/dll/win32/setupapi/devinst.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/setupapi/devinst.c b/reactos/dll/win32/setupapi/devinst.c index 05a1c24a0f9..a487de8b365 100644 --- a/reactos/dll/win32/setupapi/devinst.c +++ b/reactos/dll/win32/setupapi/devinst.c @@ -1780,7 +1780,8 @@ BOOL WINAPI SetupDiCreateDeviceInfoW( cr = CM_Create_DevInst_ExW(&DevInst, (DEVINSTID)DeviceName, RootDevInst, - 0, + (CreationFlags & DICD_GENERATE_ID) ? + CM_CREATE_DEVINST_GENERATE_ID : 0, set->hMachine); if (cr != CR_SUCCESS) { From c673f80b25b1084f7ee48b8aaddc3fa51250edbe Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 11 Aug 2013 19:57:47 +0000 Subject: [PATCH 11/68] [UMPNPMGR] - Handle the CM_CREATE_DEVNODE_GENERATE_ID flag [SETUPAPI] - Use the correct ID (the newly generated instance ID) when creating the device info if the DICD_GENERATE_ID flag was passed in svn path=/trunk/; revision=59699 --- reactos/base/services/umpnpmgr/umpnpmgr.c | 42 ++++++++++++++++++----- reactos/dll/win32/setupapi/cfgmgr.c | 4 ++- reactos/dll/win32/setupapi/devinst.c | 19 ++++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.c b/reactos/base/services/umpnpmgr/umpnpmgr.c index 12254267713..c821105c335 100644 --- a/reactos/base/services/umpnpmgr/umpnpmgr.c +++ b/reactos/base/services/umpnpmgr/umpnpmgr.c @@ -1613,16 +1613,42 @@ DWORD PNP_CreateDevInst( if (ulFlags & CM_CREATE_DEVNODE_GENERATE_ID) { - /* FIXME */ - DPRINT1("CM_CREATE_DEVNODE_GENERATE_ID support not implemented yet!\n", ret); - ret = CR_CALL_NOT_IMPLEMENTED; - goto done; + WCHAR szGeneratedInstance[MAX_DEVICE_ID_LEN]; + DWORD dwInstanceNumber; + + /* Generated ID is: Root\\ */ + dwInstanceNumber = 0; + do + { + swprintf(szGeneratedInstance, L"Root\\%ls\\%04d", + pszDeviceID, dwInstanceNumber); + + /* Try to create a device instance with this ID */ + ret = CreateDeviceInstance(szGeneratedInstance); + + dwInstanceNumber++; + } + while (ret == CR_ALREADY_SUCH_DEVINST); + + if (ret == CR_SUCCESS) + { + /* pszDeviceID is an out parameter too for generated IDs */ + if (wcslen(szGeneratedInstance) > ulLength) + { + ret = CR_BUFFER_SMALL; + } + else + { + wcscpy(pszDeviceID, szGeneratedInstance); + } + } + } + else + { + /* Create the device instance */ + ret = CreateDeviceInstance(pszDeviceID); } - /* Create the device instance */ - ret = CreateDeviceInstance(pszDeviceID); - -done:; DPRINT("PNP_CreateDevInst() done (returns %lx)\n", ret); return ret; diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index d6beff2b3f6..b6bacb0d372 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -681,7 +681,9 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW( if (ret == CR_SUCCESS) { - *pdnDevInst = pSetupStringTableAddString(StringTable, pDeviceID, 1); + /* If CM_CREATE_DEVINST_GENERATE_ID was passed in, PNP_CreateDevInst + * will return the generated device ID in szLocalDeviceID */ + *pdnDevInst = pSetupStringTableAddString(StringTable, szLocalDeviceID, 1); if (*pdnDevInst == 0) ret = CR_NO_SUCH_DEVNODE; } diff --git a/reactos/dll/win32/setupapi/devinst.c b/reactos/dll/win32/setupapi/devinst.c index a487de8b365..1130b137cac 100644 --- a/reactos/dll/win32/setupapi/devinst.c +++ b/reactos/dll/win32/setupapi/devinst.c @@ -1727,6 +1727,7 @@ BOOL WINAPI SetupDiCreateDeviceInfoW( CONFIGRET cr; DEVINST RootDevInst; DEVINST DevInst; + WCHAR GenInstanceId[MAX_DEVICE_ID_LEN]; TRACE("%p %s %s %s %p %x %p\n", DeviceInfoSet, debugstr_w(DeviceName), debugstr_guid(ClassGuid), debugstr_w(DeviceDescription), @@ -1789,6 +1790,24 @@ BOOL WINAPI SetupDiCreateDeviceInfoW( return FALSE; } + if (CreationFlags & DICD_GENERATE_ID) + { + /* Grab the actual instance ID that was created */ + cr = CM_Get_Device_ID_Ex(DevInst, + GenInstanceId, + MAX_DEVICE_ID_LEN, + 0, + set->hMachine); + if (cr != CR_SUCCESS) + { + SetLastError(GetErrorCodeFromCrCode(cr)); + return FALSE; + } + + DeviceName = GenInstanceId; + TRACE("Using generated instance ID: %s\n", debugstr_w(DeviceName)); + } + if (CreateDeviceInfo(set, DeviceName, ClassGuid, &deviceInfo)) { InsertTailList(&set->ListHead, &deviceInfo->ListEntry); From 975aee1a7cbf9304dc69962b3609d3ba273a8a4a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 11 Aug 2013 21:19:35 +0000 Subject: [PATCH 12/68] [SETUPAPI] - SetupDiRegisterDeviceInfo shouldn't fail if a device instance already exists - MSDN documentation for this function states: "If [SPRDI_FIND_DUPS] is not specified, the device instance is registered regardless of whether a device instance already exists for it." svn path=/trunk/; revision=59702 --- reactos/dll/win32/setupapi/devinst.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/setupapi/devinst.c b/reactos/dll/win32/setupapi/devinst.c index 1130b137cac..3256dbc9f88 100644 --- a/reactos/dll/win32/setupapi/devinst.c +++ b/reactos/dll/win32/setupapi/devinst.c @@ -1911,7 +1911,8 @@ BOOL WINAPI SetupDiRegisterDeviceInfo( ParentDevInst, CM_CREATE_DEVINST_NORMAL | CM_CREATE_DEVINST_DO_NOT_INSTALL, set->hMachine); - if (cr != CR_SUCCESS) + if (cr != CR_SUCCESS && + cr != CR_ALREADY_SUCH_DEVINST) { dwError = ERROR_NO_SUCH_DEVINST; } From 60666eecd3ca894b609fb3bf91b4b76f642c5967 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 00:45:04 +0000 Subject: [PATCH 13/68] [TCPIP] - Use common macro for htons - Fail compilation if an unrecognized architecture is found (testing) svn path=/trunk/; revision=59703 --- reactos/drivers/network/tcpip/include/tcpip.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reactos/drivers/network/tcpip/include/tcpip.h b/reactos/drivers/network/tcpip/include/tcpip.h index 9b077841cfd..3ab12050931 100644 --- a/reactos/drivers/network/tcpip/include/tcpip.h +++ b/reactos/drivers/network/tcpip/include/tcpip.h @@ -93,6 +93,8 @@ #else /* i386 */ +#error Unsupported architecture + /* DWORD network to host byte order conversion for other architectures */ #define DN2H(dw) \ (dw) @@ -148,7 +150,7 @@ typedef struct { } TDIEntityInfo; #ifndef htons -#define htons(x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff)) +#define htons(x) WH2N(x) #endif /* Global variable */ From 4ed049cc7bfa0eb4dbdd10880babaf5fc9f37add Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 01:12:25 +0000 Subject: [PATCH 14/68] [CMAKE] - Define i386 on x86 MSVC builds - Probably fixes the infamous MSVC networking issues caused by tcpip.h assuming it was a big-endian platform and never byte-swapping anything [TCPIP][LAN] - Fix byteswapping on AMD64 and ARM builds too svn path=/trunk/; revision=59704 --- reactos/CMakeLists.txt | 2 +- reactos/drivers/network/lan/include/net_wh.h | 6 +++--- reactos/drivers/network/tcpip/include/tcpip.h | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/reactos/CMakeLists.txt b/reactos/CMakeLists.txt index d0c83d73e4d..861e5959b1c 100644 --- a/reactos/CMakeLists.txt +++ b/reactos/CMakeLists.txt @@ -142,7 +142,7 @@ else() # Arch Options if(ARCH STREQUAL "i386") - add_definitions(-D_M_IX86 -D_X86_ -D__i386__) + add_definitions(-D_M_IX86 -D_X86_ -D__i386__ -Di386) elseif(ARCH STREQUAL "amd64") add_definitions(-D_M_AMD64 -D_AMD64_ -D__x86_64__ -D_WIN64) elseif(ARCH STREQUAL "arm") diff --git a/reactos/drivers/network/lan/include/net_wh.h b/reactos/drivers/network/lan/include/net_wh.h index b4736131836..d6bd215b4b1 100644 --- a/reactos/drivers/network/lan/include/net_wh.h +++ b/reactos/drivers/network/lan/include/net_wh.h @@ -1,6 +1,6 @@ #pragma once -#ifdef i386 +#if defined(i386) || defined(_AMD64_) || defined(_ARM_) /* DWORD network to host byte order conversion for i386 */ #define DN2H(dw) \ @@ -26,7 +26,7 @@ ((((w) & 0xFF00) >> 8) | \ (((w) & 0x00FF) << 8)) -#else /* i386 */ +#else /* defined(i386) || defined(_AMD64_) || defined(_ARM_) */ /* DWORD network to host byte order conversion for other architectures */ #define DN2H(dw) \ @@ -44,4 +44,4 @@ #define WH2N(w) \ (w) -#endif /* i386 */ +#endif /* defined(i386) || defined(_AMD64_) || defined(_ARM_) */ diff --git a/reactos/drivers/network/tcpip/include/tcpip.h b/reactos/drivers/network/tcpip/include/tcpip.h index 3ab12050931..88c7e063cb9 100644 --- a/reactos/drivers/network/tcpip/include/tcpip.h +++ b/reactos/drivers/network/tcpip/include/tcpip.h @@ -65,7 +65,7 @@ #define NDIS_BUFFER_TAG FOURCC('n','b','u','f') #define NDIS_PACKET_TAG FOURCC('n','p','k','t') -#ifdef i386 +#if defined(i386) || defined(_AMD64_) || defined(_ARM_) /* DWORD network to host byte order conversion for i386 */ #define DN2H(dw) \ @@ -91,7 +91,7 @@ ((((w) & 0xFF00) >> 8) | \ (((w) & 0x00FF) << 8)) -#else /* i386 */ +#else /* defined(i386) || defined(_AMD64_) || defined(_ARM_) */ #error Unsupported architecture @@ -111,7 +111,7 @@ #define WH2N(w) \ (w) -#endif /* i386 */ +#endif /* defined(i386) || defined(_AMD64_) || defined(_ARM_) */ /* AF_INET and other things Arty likes to use ;) */ #define AF_INET 2 From 578fec3cacf50e07609180ee361d9b5bfa5e06f7 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 03:09:28 +0000 Subject: [PATCH 15/68] [TCPIP] - Add logging of address files and connections (on temporarily for testing changes) [LWIP] - Drastically simplify the closing state machine - All connection objects (and as a result address files too) are now getting properly reaped now - Tested with Firefox and Abyss Web Server svn path=/trunk/; revision=59705 --- .../drivers/network/tcpip/include/fileobjs.h | 2 + reactos/drivers/network/tcpip/include/tcp.h | 3 + .../drivers/network/tcpip/include/titypes.h | 1 + .../drivers/network/tcpip/tcpip/fileobjs.c | 84 +++++++++++++ reactos/lib/drivers/ip/network/ip.c | 11 +- reactos/lib/drivers/lwip/src/rostcp.c | 113 ++++++++++-------- 6 files changed, 166 insertions(+), 48 deletions(-) diff --git a/reactos/drivers/network/tcpip/include/fileobjs.h b/reactos/drivers/network/tcpip/include/fileobjs.h index 33acb9c005a..5283ccdf590 100644 --- a/reactos/drivers/network/tcpip/include/fileobjs.h +++ b/reactos/drivers/network/tcpip/include/fileobjs.h @@ -35,4 +35,6 @@ NTSTATUS FileOpenControlChannel( NTSTATUS FileCloseControlChannel( PTDI_REQUEST Request); +VOID LogActiveObjects(VOID); + /* EOF */ diff --git a/reactos/drivers/network/tcpip/include/tcp.h b/reactos/drivers/network/tcpip/include/tcp.h index ce6f84bb341..c31293c0e0b 100644 --- a/reactos/drivers/network/tcpip/include/tcp.h +++ b/reactos/drivers/network/tcpip/include/tcp.h @@ -211,3 +211,6 @@ VOID FlushAllQueues(PCONNECTION_ENDPOINT Connection, NTSTATUS Status); VOID CompleteBucket(PCONNECTION_ENDPOINT Connection, PTDI_BUCKET Bucket, const BOOLEAN Synchronous); + +void +LibTCPDumpPcb(PVOID SocketContext); diff --git a/reactos/drivers/network/tcpip/include/titypes.h b/reactos/drivers/network/tcpip/include/titypes.h index e9380ffc030..70ba4ea0d9c 100644 --- a/reactos/drivers/network/tcpip/include/titypes.h +++ b/reactos/drivers/network/tcpip/include/titypes.h @@ -281,6 +281,7 @@ typedef struct _CONNECTION_ENDPOINT { BOOLEAN SendShutdown; BOOLEAN ReceiveShutdown; NTSTATUS ReceiveShutdownStatus; + BOOLEAN Closing; struct _CONNECTION_ENDPOINT *Next; /* Next connection in address file list */ } CONNECTION_ENDPOINT, *PCONNECTION_ENDPOINT; diff --git a/reactos/drivers/network/tcpip/tcpip/fileobjs.c b/reactos/drivers/network/tcpip/tcpip/fileobjs.c index 7ef8c7d558a..30a47136cea 100644 --- a/reactos/drivers/network/tcpip/tcpip/fileobjs.c +++ b/reactos/drivers/network/tcpip/tcpip/fileobjs.c @@ -10,6 +10,8 @@ #include "precomp.h" +/* Uncomment for logging of connections and address files every 10 seconds */ +#define LOG_OBJECTS /* List of all address file objects managed by this driver */ LIST_ENTRY AddressFileListHead; @@ -99,6 +101,88 @@ BOOLEAN AddrReceiveMatch( return FALSE; } +VOID +LogActiveObjects(VOID) +{ +#ifdef LOG_OBJECTS + PLIST_ENTRY CurrentEntry; + KIRQL OldIrql; + PADDRESS_FILE AddrFile; + PCONNECTION_ENDPOINT Conn; + + DbgPrint("----------- TCP/IP Active Object Dump -------------\n"); + + TcpipAcquireSpinLock(&AddressFileListLock, &OldIrql); + + CurrentEntry = AddressFileListHead.Flink; + while (CurrentEntry != &AddressFileListHead) + { + AddrFile = CONTAINING_RECORD(CurrentEntry, ADDRESS_FILE, ListEntry); + + DbgPrint("Address File (%s, %d, %d) @ 0x%p | Ref count: %d | Sharers: %d\n", + A2S(&AddrFile->Address), WN2H(AddrFile->Port), AddrFile->Protocol, + AddrFile, AddrFile->RefCount, AddrFile->Sharers); + DbgPrint("\tListener: "); + if (AddrFile->Listener == NULL) + DbgPrint("\n"); + else + DbgPrint("0x%p\n", AddrFile->Listener); + DbgPrint("\tAssociated endpoints: "); + if (AddrFile->Connection == NULL) + DbgPrint("\n"); + else + { + Conn = AddrFile->Connection; + while (Conn) + { + DbgPrint("0x%p ", Conn); + Conn = Conn->Next; + } + DbgPrint("\n"); + } + + CurrentEntry = CurrentEntry->Flink; + } + + TcpipReleaseSpinLock(&AddressFileListLock, OldIrql); + + TcpipAcquireSpinLock(&ConnectionEndpointListLock, &OldIrql); + + CurrentEntry = ConnectionEndpointListHead.Flink; + while (CurrentEntry != &ConnectionEndpointListHead) + { + Conn = CONTAINING_RECORD(CurrentEntry, CONNECTION_ENDPOINT, ListEntry); + + DbgPrint("Connection @ 0x%p | Ref count: %d\n", Conn, Conn->RefCount); + DbgPrint("\tPCB: "); + if (Conn->SocketContext == NULL) + DbgPrint("\n"); + else + { + DbgPrint("0x%p\n", Conn->SocketContext); + LibTCPDumpPcb(Conn->SocketContext); + } + DbgPrint("\tPacket queue status: %s\n", IsListEmpty(&Conn->PacketQueue) ? "Empty" : "Not Empty"); + DbgPrint("\tRequest lists: Connect: %s | Recv: %s | Send: %s | Shutdown: %s | Listen: %s\n", + IsListEmpty(&Conn->ConnectRequest) ? "Empty" : "Not Empty", + IsListEmpty(&Conn->ReceiveRequest) ? "Empty" : "Not Empty", + IsListEmpty(&Conn->SendRequest) ? "Empty" : "Not Empty", + IsListEmpty(&Conn->ShutdownRequest) ? "Empty" : "Not Empty", + IsListEmpty(&Conn->ListenRequest) ? "Empty" : "Not Empty"); + DbgPrint("\tSend shutdown: %s\n", Conn->SendShutdown ? "Yes" : "No"); + DbgPrint("\tReceive shutdown: %s\n", Conn->ReceiveShutdown ? "Yes" : "No"); + if (Conn->ReceiveShutdown) DbgPrint("\tReceive shutdown status: 0x%x\n", Conn->ReceiveShutdownStatus); + DbgPrint("\tClosing: %s\n", Conn->Closing ? "Yes" : "No"); + + CurrentEntry = CurrentEntry->Flink; + } + + TcpipReleaseSpinLock(&ConnectionEndpointListLock, OldIrql); + + DbgPrint("---------------------------------------------------\n"); +#endif +} + PADDRESS_FILE AddrFindShared( PIP_ADDRESS BindAddress, USHORT Port, diff --git a/reactos/lib/drivers/ip/network/ip.c b/reactos/lib/drivers/ip/network/ip.c index 14a36f5d8c8..ac26f16225f 100644 --- a/reactos/lib/drivers/ip/network/ip.c +++ b/reactos/lib/drivers/ip/network/ip.c @@ -24,6 +24,8 @@ BOOLEAN IpWorkItemQueued = FALSE; IP_PROTOCOL_HANDLER ProtocolTable[IP_PROTOCOL_TABLE_SIZE]; +ULONG IpTimerExpirations; + VOID TCPRegisterInterface(PIP_INTERFACE IF); @@ -119,9 +121,16 @@ VOID NTAPI IPTimeoutDpcFn(PKDPC Dpc, * SystemArgument1 = Unused * SystemArgument2 = Unused * NOTES: - * This routine is dispatched once in a while to do maintainance jobs + * This routine is dispatched once in a while to do maintenance jobs */ { + IpTimerExpirations++; + + if ((IpTimerExpirations % 10) == 0) + { + LogActiveObjects(); + } + /* Check if datagram fragments have taken too long to assemble */ IPDatagramReassemblyTimeout(); diff --git a/reactos/lib/drivers/lwip/src/rostcp.c b/reactos/lib/drivers/lwip/src/rostcp.c index 57c8876c29d..55f929684bf 100755 --- a/reactos/lib/drivers/lwip/src/rostcp.c +++ b/reactos/lib/drivers/lwip/src/rostcp.c @@ -35,6 +35,21 @@ extern NPAGED_LOOKASIDE_LIST QueueEntryLookasideList; /* Required for ERR_T to NTSTATUS translation in receive error handling */ NTSTATUS TCPTranslateError(const err_t err); +void +LibTCPDumpPcb(PVOID SocketContext) +{ + struct tcp_pcb *pcb = (struct tcp_pcb*)SocketContext; + unsigned int addr = ntohl(pcb->remote_ip.addr); + + DbgPrint("\tState: %s\n", tcp_state_str[pcb->state]); + DbgPrint("\tRemote: (%d.%d.%d.%d, %d)\n", + (addr >> 24) & 0xFF, + (addr >> 16) & 0xFF, + (addr >> 8) & 0xFF, + addr & 0xFF, + pcb->remote_port); +} + static void LibTCPEmptyQueue(PCONNECTION_ENDPOINT Connection) @@ -231,18 +246,15 @@ InternalRecvEventHandler(void *arg, PTCP_PCB pcb, struct pbuf *p, const err_t er Connection->ReceiveShutdown = TRUE; Connection->ReceiveShutdownStatus = STATUS_SUCCESS; - /* This code path executes for both remotely and locally initiated closures, - * and we need to distinguish between them */ - if (Connection->SocketContext) + /* If we already did a send shutdown, we're in TIME_WAIT so we can't use this PCB anymore */ + if (Connection->SendShutdown) { - /* Remotely initiated close */ - TCPRecvEventHandler(arg); - } - else - { - /* Locally initated close */ - TCPFinEventHandler(arg, ERR_CLSD); + Connection->SocketContext = NULL; + tcp_arg(pcb, NULL); } + + /* Remotely initiated close */ + TCPRecvEventHandler(arg); } return ERR_OK; @@ -285,30 +297,18 @@ void InternalErrorEventHandler(void *arg, const err_t err) { PCONNECTION_ENDPOINT Connection = arg; - KIRQL OldIrql; /* Make sure the socket didn't get closed */ if (!arg) return; - /* Check if data is left to be read */ - LockObject(Connection, &OldIrql); - if (IsListEmpty(&Connection->PacketQueue)) - { - UnlockObject(Connection, OldIrql); + /* The PCB is dead now */ + Connection->SocketContext = NULL; - /* Deliver the error now */ - TCPFinEventHandler(arg, err); - } - else - { - UnlockObject(Connection, OldIrql); + /* Defer the error delivery until all data is gone */ + Connection->ReceiveShutdown = TRUE; + Connection->ReceiveShutdownStatus = TCPTranslateError(err); - /* Defer the error delivery until all data is gone */ - Connection->ReceiveShutdown = TRUE; - Connection->ReceiveShutdownStatus = TCPTranslateError(err); - - TCPRecvEventHandler(arg); - } + TCPRecvEventHandler(arg); } static @@ -633,7 +633,12 @@ LibTCPShutdownCallback(void *arg) goto done; } - /* These need to be called separately, otherwise we get a tcp_close() */ + /* LwIP makes the (questionable) assumption that SHUTDOWN_RDWR is equivalent to tcp_close(). + * This assumption holds even if the shutdown calls are done separately (even through multiple + * WinSock shutdown() calls). This assumption means that lwIP has the right to deallocate our + * PCB without telling us if we shutdown TX and RX. To avoid these problems, we'll clear the + * socket context if we have called shutdown for TX and RX. + */ if (msg->Input.Shutdown.shut_rx) { msg->Output.Shutdown.Error = tcp_shutdown(pcb, TRUE, FALSE); } @@ -651,6 +656,14 @@ LibTCPShutdownCallback(void *arg) if (msg->Input.Shutdown.shut_tx) msg->Input.Shutdown.Connection->SendShutdown = TRUE; + + if (msg->Input.Shutdown.Connection->ReceiveShutdown && + msg->Input.Shutdown.Connection->SendShutdown) + { + /* The PCB is not ours anymore */ + msg->Input.Shutdown.Connection->SocketContext = NULL; + tcp_arg(pcb, NULL); + } } done: @@ -697,37 +710,43 @@ LibTCPCloseCallback(void *arg) /* Empty the queue even if we're already "closed" */ LibTCPEmptyQueue(msg->Input.Close.Connection); - if (!msg->Input.Close.Connection->SocketContext) + /* Check if we've already been closed */ + if (msg->Input.Close.Connection->Closing) { msg->Output.Close.Error = ERR_OK; goto done; } - /* Clear the PCB pointer */ - msg->Input.Close.Connection->SocketContext = NULL; + /* Enter "closing" mode if we're doing a normal close */ + if (msg->Input.Close.Callback) + msg->Input.Close.Connection->Closing = TRUE; - switch (pcb->state) + /* Check if the PCB was already "closed" but the client doesn't know it yet */ + if (!msg->Input.Close.Connection->SocketContext) { - case CLOSED: - case LISTEN: - case SYN_SENT: - msg->Output.Close.Error = tcp_close(pcb); - - if (!msg->Output.Close.Error && msg->Input.Close.Callback) - TCPFinEventHandler(msg->Input.Close.Connection, ERR_CLSD); - break; - - default: - /* Abort the socket */ - tcp_abort(pcb); - msg->Output.Close.Error = ERR_OK; - break; + if (msg->Input.Close.Callback) + TCPFinEventHandler(msg->Input.Close.Connection, ERR_CLSD); + msg->Output.Close.Error = ERR_OK; + goto done; } + /* Clear the PCB pointer and stop callbacks */ + msg->Input.Close.Connection->SocketContext = NULL; + tcp_arg(pcb, NULL); + + /* This may generate additional callbacks but we don't care, + * because they're too inconsistent to rely on */ + msg->Output.Close.Error = tcp_close(pcb); + if (msg->Output.Close.Error) { /* Restore the PCB pointer */ msg->Input.Close.Connection->SocketContext = pcb; + msg->Input.Close.Connection->Closing = FALSE; + } + else if (msg->Input.Close.Callback) + { + TCPFinEventHandler(msg->Input.Close.Connection, ERR_CLSD); } done: From fbc6d8b0859d32cfcff166b915e928b105ec6c9e Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 04:08:20 +0000 Subject: [PATCH 16/68] [LWIP] - Ensure that the connection failure gets delivered if the socket is not yet ready to receive or has shutdown receive svn path=/trunk/; revision=59706 --- reactos/lib/drivers/ip/transport/tcp/event.c | 4 +--- reactos/lib/drivers/lwip/src/rostcp.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/reactos/lib/drivers/ip/transport/tcp/event.c b/reactos/lib/drivers/ip/transport/tcp/event.c index c5b8b95620c..23c0c56edf4 100644 --- a/reactos/lib/drivers/ip/transport/tcp/event.c +++ b/reactos/lib/drivers/ip/transport/tcp/event.c @@ -264,12 +264,10 @@ TCPFinEventHandler(void *arg, const err_t err) const NTSTATUS Status = TCPTranslateError(err); KIRQL OldIrql; + ASSERT(Connection->SocketContext == NULL); ASSERT(Connection->AddressFile); ASSERT(err != ERR_OK); - /* First off all, remove the PCB pointer */ - Connection->SocketContext = NULL; - /* Complete all outstanding requests now */ FlushAllQueues(Connection, Status); diff --git a/reactos/lib/drivers/lwip/src/rostcp.c b/reactos/lib/drivers/lwip/src/rostcp.c index 55f929684bf..2acb93590b0 100755 --- a/reactos/lib/drivers/lwip/src/rostcp.c +++ b/reactos/lib/drivers/lwip/src/rostcp.c @@ -251,10 +251,13 @@ InternalRecvEventHandler(void *arg, PTCP_PCB pcb, struct pbuf *p, const err_t er { Connection->SocketContext = NULL; tcp_arg(pcb, NULL); + TCPFinEventHandler(Connection, ERR_OK); + } + else + { + /* Remotely initiated close */ + TCPRecvEventHandler(arg); } - - /* Remotely initiated close */ - TCPRecvEventHandler(arg); } return ERR_OK; @@ -299,16 +302,18 @@ InternalErrorEventHandler(void *arg, const err_t err) PCONNECTION_ENDPOINT Connection = arg; /* Make sure the socket didn't get closed */ - if (!arg) return; + if (!arg || Connection->SocketContext == NULL) return; /* The PCB is dead now */ Connection->SocketContext = NULL; - /* Defer the error delivery until all data is gone */ + /* Give them one shot to receive the remaining data */ Connection->ReceiveShutdown = TRUE; Connection->ReceiveShutdownStatus = TCPTranslateError(err); + TCPRecvEventHandler(Connection); - TCPRecvEventHandler(arg); + /* Terminate the connection */ + TCPFinEventHandler(Connection, err); } static @@ -663,6 +668,7 @@ LibTCPShutdownCallback(void *arg) /* The PCB is not ours anymore */ msg->Input.Shutdown.Connection->SocketContext = NULL; tcp_arg(pcb, NULL); + TCPFinEventHandler(msg->Input.Shutdown.Connection, ERR_CLSD); } } @@ -724,8 +730,6 @@ LibTCPCloseCallback(void *arg) /* Check if the PCB was already "closed" but the client doesn't know it yet */ if (!msg->Input.Close.Connection->SocketContext) { - if (msg->Input.Close.Callback) - TCPFinEventHandler(msg->Input.Close.Connection, ERR_CLSD); msg->Output.Close.Error = ERR_OK; goto done; } From 84da0d7111b1ce242dea7a80d959e5865c6cbec5 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 04:58:22 +0000 Subject: [PATCH 17/68] [LWIP] - Indicate the graceful close before calling the FIN event handler svn path=/trunk/; revision=59707 --- reactos/lib/drivers/lwip/src/rostcp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reactos/lib/drivers/lwip/src/rostcp.c b/reactos/lib/drivers/lwip/src/rostcp.c index 2acb93590b0..44a865ab3ca 100755 --- a/reactos/lib/drivers/lwip/src/rostcp.c +++ b/reactos/lib/drivers/lwip/src/rostcp.c @@ -251,12 +251,15 @@ InternalRecvEventHandler(void *arg, PTCP_PCB pcb, struct pbuf *p, const err_t er { Connection->SocketContext = NULL; tcp_arg(pcb, NULL); - TCPFinEventHandler(Connection, ERR_OK); } - else + + /* Indicate the graceful close event */ + TCPRecvEventHandler(arg); + + /* If the PCB is gone, clean up the connection */ + if (Connection->SendShutdown) { - /* Remotely initiated close */ - TCPRecvEventHandler(arg); + TCPFinEventHandler(Connection, ERR_CLSD); } } From a88dd96b211da8695b7a923f6d8f5b959ac2bf18 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 06:00:06 +0000 Subject: [PATCH 18/68] [IP] - Fix a nasty bug preventing any of the non-default interface's NCEs from being selected - Fix a bug preventing loopback NCEs from being found (fixes hang in ws2_32:sock winetest) svn path=/trunk/; revision=59708 --- reactos/lib/drivers/ip/network/neighbor.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/reactos/lib/drivers/ip/network/neighbor.c b/reactos/lib/drivers/ip/network/neighbor.c index d4ca9f34ddb..a7c1d35eeaf 100644 --- a/reactos/lib/drivers/ip/network/neighbor.c +++ b/reactos/lib/drivers/ip/network/neighbor.c @@ -444,8 +444,6 @@ PNEIGHBOR_CACHE_ENTRY NBLocateNeighbor( TcpipAcquireSpinLock(&NeighborCache[HashValue].Lock, &OldIrql); - NCE = NeighborCache[HashValue].Cache; - /* If there's no adapter specified, we'll look for a match on * each one. */ if (Interface == NULL) @@ -460,6 +458,7 @@ PNEIGHBOR_CACHE_ENTRY NBLocateNeighbor( do { + NCE = NeighborCache[HashValue].Cache; while (NCE != NULL) { if (NCE->Interface == Interface && @@ -477,6 +476,21 @@ PNEIGHBOR_CACHE_ENTRY NBLocateNeighbor( while ((FirstInterface != NULL) && ((Interface = GetDefaultInterface()) != FirstInterface)); + if ((NCE == NULL) && (FirstInterface != NULL)) + { + /* This time we'll even match loopback NCEs */ + NCE = NeighborCache[HashValue].Cache; + while (NCE != NULL) + { + if (AddrIsEqual(Address, &NCE->Address)) + { + break; + } + + NCE = NCE->Next; + } + } + TcpipReleaseSpinLock(&NeighborCache[HashValue].Lock, OldIrql); TI_DbgPrint(MAX_TRACE, ("Leaving.\n")); From abf6e4f969792a97ad4c33ca9300a95d7ceda287 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 12 Aug 2013 06:46:06 +0000 Subject: [PATCH 19/68] [TCPIP] - Disable object logging now that all the deadlocks, leaks, double-frees, and use-after-frees visible in our test suite are fixed in TCP/IP svn path=/trunk/; revision=59709 --- reactos/drivers/network/tcpip/tcpip/fileobjs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/drivers/network/tcpip/tcpip/fileobjs.c b/reactos/drivers/network/tcpip/tcpip/fileobjs.c index 30a47136cea..bd696b7cf2b 100644 --- a/reactos/drivers/network/tcpip/tcpip/fileobjs.c +++ b/reactos/drivers/network/tcpip/tcpip/fileobjs.c @@ -11,7 +11,7 @@ #include "precomp.h" /* Uncomment for logging of connections and address files every 10 seconds */ -#define LOG_OBJECTS +//#define LOG_OBJECTS /* List of all address file objects managed by this driver */ LIST_ENTRY AddressFileListHead; From d802ba093a03667ec3833d66f56bbb8eab87a645 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 12 Aug 2013 11:52:50 +0000 Subject: [PATCH 20/68] [PSDK] * Annotate vfw.h. svn path=/trunk/; revision=59710 --- reactos/include/psdk/vfw.h | 1033 +++++++++++++++++++++++++++--------- 1 file changed, 794 insertions(+), 239 deletions(-) diff --git a/reactos/include/psdk/vfw.h b/reactos/include/psdk/vfw.h index 83d6dbad12d..a80b293ab13 100644 --- a/reactos/include/psdk/vfw.h +++ b/reactos/include/psdk/vfw.h @@ -170,26 +170,36 @@ typedef struct { #define ICCOMPRESS_KEYFRAME 0x00000001L typedef struct { - DWORD dwFlags; - LPBITMAPINFOHEADER lpbiOutput; - LPVOID lpOutput; - LPBITMAPINFOHEADER lpbiInput; - LPVOID lpInput; - LPDWORD lpckid; - LPDWORD lpdwFlags; - LONG lFrameNum; - DWORD dwFrameSize; - DWORD dwQuality; - LPBITMAPINFOHEADER lpbiPrev; - LPVOID lpPrev; + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiOutput; + _Field_size_bytes_(lpbiOutput->biSizeImage) LPVOID lpOutput; + LPBITMAPINFOHEADER lpbiInput; + _Field_size_bytes_(lpbiInput->biSizeImage) LPVOID lpInput; + LPDWORD lpckid; + LPDWORD lpdwFlags; + LONG lFrameNum; + DWORD dwFrameSize; + DWORD dwQuality; + LPBITMAPINFOHEADER lpbiPrev; + _Field_size_bytes_(lpbiPrev->biSizeImage) LPVOID lpPrev; } ICCOMPRESS; -DWORD VFWAPIV ICCompress( - HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData, - LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid, - LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality, - LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev -); +DWORD +VFWAPIV +ICCompress( + _In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LPBITMAPINFOHEADER lpbiOutput, + _Out_writes_bytes_(lpbiOutput->biSizeImage) LPVOID lpData, + _In_ LPBITMAPINFOHEADER lpbiInput, + _In_reads_bytes_(lpbiInput->biSizeImage) LPVOID lpBits, + _Out_opt_ LPDWORD lpckid, + _Out_opt_ LPDWORD lpdwFlags, + _In_ LONG lFrameNum, + _In_ DWORD dwFrameSize, + _In_ DWORD dwQuality, + _In_opt_ LPBITMAPINFOHEADER lpbiPrev, + _In_reads_bytes_opt_(lpbiPrev->biSizeImage) LPVOID lpPrev); #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ @@ -236,8 +246,8 @@ typedef struct { DWORD dwScale; DWORD dwOverheadPerFrame; DWORD dwReserved2; - LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len); - LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len); + LONG (CALLBACK *GetData)(_In_ LPARAM lInput, _In_ LONG lFrame, _Out_writes_bytes_(len) LPVOID lpBits, _In_ LONG len); + LONG (CALLBACK *PutData)(_In_ LPARAM lOutput, _In_ LONG lFrame, _In_reads_bytes_(len) LPVOID lpBits, _In_ LONG len); } ICCOMPRESSFRAMES; typedef struct { @@ -321,12 +331,12 @@ typedef struct { #define ICDECOMPRESS_NOTKEYFRAME 0x08000000 /* this frame is not a key frame */ typedef struct { - DWORD dwFlags; /* flags (from AVI index...) */ - LPBITMAPINFOHEADER lpbiInput; /* BITMAPINFO of compressed data */ - LPVOID lpInput; /* compressed data */ - LPBITMAPINFOHEADER lpbiOutput; /* DIB to decompress to */ - LPVOID lpOutput; - DWORD ckid; /* ckid from AVI file */ + DWORD dwFlags; /* flags (from AVI index...) */ + LPBITMAPINFOHEADER lpbiInput; /* BITMAPINFO of compressed data */ + _Field_size_bytes_(lpbiInput->biSizeImage) LPVOID lpInput; /* compressed data */ + LPBITMAPINFOHEADER lpbiOutput; /* DIB to decompress to */ + _Field_size_bytes_(lpbiOutput->biSizeImage) LPVOID lpOutput; + DWORD ckid; /* ckid from AVI file */ } ICDECOMPRESS; typedef struct { @@ -348,7 +358,15 @@ typedef struct { INT dySrc; } ICDECOMPRESSEX; -DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits); +DWORD +VFWAPIV +ICDecompress( + _In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LPBITMAPINFOHEADER lpbiFormat, + _In_reads_bytes_(lpbiFormat->biSizeImage) LPVOID lpData, + _In_ LPBITMAPINFOHEADER lpbi, + _Out_writes_bytes_(lpbi->biSizeImage) LPVOID lpBits); #define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ @@ -385,13 +403,31 @@ DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,L #define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0) -LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD_PTR dw1, DWORD_PTR dw2); +LRESULT +VFWAPI +ICSendMessage( + _In_ HIC hic, + _In_ UINT msg, + _In_ DWORD_PTR dw1, + _In_ DWORD_PTR dw2); -static inline LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags, - LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc, - int xSrc, int ySrc, int dxSrc, int dySrc, - LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst, - int xDst, int yDst, int dxDst, int dyDst) +static inline +LRESULT +VFWAPI +ICDecompressEx(_In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LPBITMAPINFOHEADER lpbiSrc, + _In_reads_bytes_(lpbiSrc->biSizeImage) LPVOID lpSrc, + _In_ int xSrc, + _In_ int ySrc, + _In_ int dxSrc, + _In_ int dySrc, + _In_ LPBITMAPINFOHEADER lpbiDst, + _Out_writes_bytes_(lpbiDst->biSizeImage) LPVOID lpDst, + _In_ int xDst, + _In_ int yDst, + _In_ int dxDst, + _In_ int dyDst) { ICDECOMPRESSEX ic; @@ -411,16 +447,23 @@ static inline LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags, return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD_PTR)&ic, sizeof(ic)); } -static inline LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags, - LPBITMAPINFOHEADER lpbiSrc, - LPVOID lpSrc, - int xSrc, int ySrc, int dxSrc, int dySrc, - LPBITMAPINFOHEADER lpbiDst, - LPVOID lpDst, - int xDst, - int yDst, - int dxDst, - int dyDst) +static inline +LRESULT +VFWAPI +ICDecompressExBegin(_In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LPBITMAPINFOHEADER lpbiSrc, + _In_opt_ LPVOID lpSrc, + _In_ int xSrc, + _In_ int ySrc, + _In_ int dxSrc, + _In_ int dySrc, + _In_ LPBITMAPINFOHEADER lpbiDst, + _Out_opt_ LPVOID lpDst, + _In_ int xDst, + _In_ int yDst, + _In_ int dxDst, + _In_ int dyDst) { ICDECOMPRESSEX ic; @@ -439,16 +482,24 @@ static inline LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags, ic.dyDst = dyDst; return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD_PTR)&ic, sizeof(ic)); } -static inline LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags, - LPBITMAPINFOHEADER lpbiSrc, - LPVOID lpSrc, - int xSrc, int ySrc, int dxSrc, int dySrc, - LPBITMAPINFOHEADER lpbiDst, - LPVOID lpDst, - int xDst, - int yDst, - int dxDst, - int dyDst) + +static inline +LRESULT +VFWAPI +ICDecompressExQuery(_In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LPBITMAPINFOHEADER lpbiSrc, + _Reserved_ LPVOID lpSrc, + _In_ int xSrc, + _In_ int ySrc, + _In_ int dxSrc, + _In_ int dySrc, + _In_opt_ LPBITMAPINFOHEADER lpbiDst, + _Out_opt_ LPVOID lpDst, + _In_ int xDst, + _In_ int yDst, + _In_ int dxDst, + _In_ int dyDst) { ICDECOMPRESSEX ic; @@ -487,23 +538,87 @@ static inline LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags, #define ICDrawOpen(fccType, fccHandler, lpbiIn) \ ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW) -HANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, - LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality, - LONG* plSize); +HANDLE +VFWAPI +ICImageCompress( + _In_ HIC hic, + _In_ UINT uiFlags, + _In_ LPBITMAPINFO lpbiIn, + _In_ LPVOID lpBits, + _In_opt_ LPBITMAPINFO lpbiOut, + _In_ LONG lQuality, + _Inout_opt_ LONG* plSize); -HANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, - LPVOID lpBits, LPBITMAPINFO lpbiOut); +HANDLE +VFWAPI +ICImageDecompress( + _In_opt_ HIC hic, + _In_ UINT uiFlags, + _In_ LPBITMAPINFO lpbiIn, + _In_ LPVOID lpBits, + _In_opt_ LPBITMAPINFO lpbiOut); -BOOL VFWAPI ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo); -BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags); -BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags); -LRESULT VFWAPI ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb); -HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode); -HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler); +BOOL +VFWAPI +ICInfo( + _In_ DWORD fccType, + _In_ DWORD fccHandler, + _Out_ ICINFO * lpicinfo); -LRESULT VFWAPI ICClose(HIC hic); -HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags); -HIC VFWAPI ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy); +BOOL +VFWAPI +ICInstall( + _In_ DWORD fccType, + _In_ DWORD fccHandler, + _In_ LPARAM lParam, + _In_ LPSTR szDesc, + _In_ UINT wFlags); + +BOOL +VFWAPI +ICRemove( + _In_ DWORD fccType, + _In_ DWORD fccHandler, + _In_ UINT wFlags); + +_Success_(return != 0) +LRESULT +VFWAPI +ICGetInfo( + _In_ HIC hic, + _Out_writes_bytes_to_(cb, return) ICINFO *picinfo, + _In_ DWORD cb); + +HIC VFWAPI ICOpen(_In_ DWORD fccType, _In_ DWORD fccHandler, _In_ UINT wMode); + +HIC +VFWAPI +ICOpenFunction( + _In_ DWORD fccType, + _In_ DWORD fccHandler, + _In_ UINT wMode, + _In_ DRIVERPROC lpfnHandler); + +LRESULT VFWAPI ICClose(_In_ HIC hic); + +HIC +VFWAPI +ICLocate( + _In_ DWORD fccType, + _In_ DWORD fccHandler, + _In_ LPBITMAPINFOHEADER lpbiIn, + _In_opt_ LPBITMAPINFOHEADER lpbiOut, + _In_ WORD wFlags); + +HIC +VFWAPI +ICGetDisplayFormat( + _In_opt_ HIC hic, + _In_ LPBITMAPINFOHEADER lpbiIn, + _Out_ LPBITMAPINFOHEADER lpbiOut, + _In_ int BitDepth, + _In_ int dx, + _In_ int dy); /* Values for wFlags of ICInstall() */ #define ICINSTALL_UNICODE 0x8000 @@ -555,24 +670,25 @@ typedef struct { LPPALETTEENTRY lppe; } ICPALETTE; -DWORD VFWAPIV ICDrawBegin( - HIC hic, - DWORD dwFlags,/* flags */ - HPALETTE hpal, /* palette to draw with */ - HWND hwnd, /* window to draw to */ - HDC hdc, /* HDC to draw to */ - INT xDst, /* destination rectangle */ - INT yDst, - INT dxDst, - INT dyDst, - LPBITMAPINFOHEADER lpbi, /* format of frame to draw */ - INT xSrc, /* source rectangle */ - INT ySrc, - INT dxSrc, - INT dySrc, - DWORD dwRate, /* frames/second = (dwRate/dwScale) */ - DWORD dwScale -); +DWORD +VFWAPIV +ICDrawBegin( + _In_ HIC hic, + _In_ DWORD dwFlags, + _In_opt_ HPALETTE hpal, + _In_opt_ HWND hwnd, + _In_opt_ HDC hdc, + _In_ INT xDst, + _In_ INT yDst, + _In_ INT dxDst, + _In_ INT dyDst, + _In_ LPBITMAPINFOHEADER lpbi, + _In_ INT xSrc, + _In_ INT ySrc, + _In_ INT dxSrc, + _In_ INT dySrc, + _In_ DWORD dwRate, + _In_ DWORD dwScale); /* as passed to ICM_DRAW_BEGIN */ typedef struct { @@ -607,13 +723,27 @@ typedef struct { LONG lTime; } ICDRAW; -DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime); +DWORD +VFWAPIV +ICDraw( + _In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LPVOID lpFormat, + _In_reads_bytes_opt_(cbData) LPVOID lpData, + _In_ DWORD cbData, + _In_ LONG lTime); -static inline LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, - LPBITMAPINFOHEADER lpbiOut, - int dxSrc, int dySrc, - int dxDst, int dyDst, - HIC hicDecomp) +static inline +LRESULT +VFWAPI +ICDrawSuggestFormat(_In_ HIC hic, + _In_ LPBITMAPINFOHEADER lpbiIn, + _Out_ LPBITMAPINFOHEADER lpbiOut, + _In_ int dxSrc, + _In_ int dySrc, + _In_ int dxDst, + _In_ int dyDst, + _In_ HIC hicDecomp) { ICDRAWSUGGEST ic; @@ -666,8 +796,13 @@ static inline LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpb #define ICDrawRenderBuffer(hic) \ ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0) -static inline LRESULT VFWAPI ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam, - LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG)) +static inline +LRESULT +VFWAPI +ICSetStatusProc(_In_ HIC hic, + _In_ DWORD dwFlags, + _In_ LRESULT lParam, + _In_ LONG(CALLBACK *fpfnStatus)(_In_ LPARAM, _In_ UINT, _In_ LONG)) { ICSETSTATUSPROC ic; @@ -700,20 +835,39 @@ typedef struct { #define ICMF_COMPVARS_VALID 0x00000001 -BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData, - PCOMPVARS pc, LPSTR lpszTitle); +BOOL +VFWAPI +ICCompressorChoose( + _In_opt_ HWND hwnd, + _In_ UINT uiFlags, + _In_opt_ LPVOID pvIn, + _In_opt_ LPVOID lpData, + _Inout_ PCOMPVARS pc, + _In_opt_ LPSTR lpszTitle); #define ICMF_CHOOSE_KEYFRAME 0x0001 #define ICMF_CHOOSE_DATARATE 0x0002 #define ICMF_CHOOSE_PREVIEW 0x0004 #define ICMF_CHOOSE_ALLCOMPRESSORS 0x0008 -BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn); -void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc); +BOOL +VFWAPI +ICSeqCompressFrameStart( + _In_ PCOMPVARS pc, + _In_ LPBITMAPINFO lpbiIn); -LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits, - BOOL *pfKey, LONG *plSize); -void VFWAPI ICCompressorFree(PCOMPVARS pc); +void VFWAPI ICSeqCompressFrameEnd(_In_ PCOMPVARS pc); + +LPVOID +VFWAPI +ICSeqCompressFrame( + _In_ PCOMPVARS pc, + _Reserved_ UINT uiFlags, + _In_ LPVOID lpBits, + _Out_ BOOL *pfKey, + _Inout_opt_ LONG *plSize); + +void VFWAPI ICCompressorFree(_In_ PCOMPVARS pc); /********************* AVIFILE function declarations *************************/ @@ -998,21 +1152,21 @@ DEFINE_AVIGUID(CLSID_AVIFile, 0x00020000, 0, 0); DECLARE_INTERFACE_(IAVIStream,IUnknown) { /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, _Outptr_ void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIStream methods ***/ STDMETHOD(Create)(THIS_ LPARAM lParam1, LPARAM lParam2) PURE; - STDMETHOD(Info)(THIS_ AVISTREAMINFOW *psi, LONG lSize) PURE; - STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos, LONG lFlags) PURE; - STDMETHOD(ReadFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG *lpcbFormat) PURE; - STDMETHOD(SetFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat) PURE; - STDMETHOD(Read)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples) PURE; - STDMETHOD(Write)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG *plBytesWritten) PURE; - STDMETHOD(Delete)(THIS_ LONG lStart, LONG lSamples) PURE; - STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE; - STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE; - STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW *plInfo, LONG cbInfo) PURE; + STDMETHOD(Info)(THIS_ _Out_writes_bytes_(lSize) AVISTREAMINFOW *psi, _In_ LONG lSize) PURE; + STDMETHOD_(LONG,FindSample)(THIS_ _In_ LONG lPos, _In_ LONG lFlags) PURE; + STDMETHOD(ReadFormat)(THIS_ _In_ LONG lPos, _Out_writes_bytes_to_opt_(*lpcbFormat, *lpcbFormat) LPVOID lpFormat, _Inout_ LONG *lpcbFormat) PURE; + STDMETHOD(SetFormat)(THIS_ _In_ LONG lPos, _In_reads_bytes_(cbFormat) LPVOID lpFormat, _In_ LONG cbFormat) PURE; + STDMETHOD(Read)(THIS_ _In_ LONG lStart, _In_ LONG lSamples, _Out_writes_bytes_opt_(cbBuffer) LPVOID lpBuffer, _In_ LONG cbBuffer, _Out_opt_ LONG *plBytes, _Out_opt_ LONG *plSamples) PURE; + STDMETHOD(Write)(THIS_ _In_ LONG lStart, _In_ LONG lSamples, _In_reads_bytes_(cbBuffer) LPVOID lpBuffer, _In_ LONG cbBuffer, _In_ DWORD dwFlags, _Out_opt_ LONG *plSampWritten, _Out_opt_ LONG *plBytesWritten) PURE; + STDMETHOD(Delete)(THIS_ _In_ LONG lStart, _In_ LONG lSamples) PURE; + STDMETHOD(ReadData)(THIS_ _In_ DWORD fcc, _Out_writes_bytes_to_opt_(*lpcbBuffer, *lpcbBuffer) LPVOID lpBuffer, _Inout_ LONG *lpcbBuffer) PURE; + STDMETHOD(WriteData)(THIS_ _In_ DWORD fcc, _In_reads_bytes_(cbBuffer) LPVOID lpBuffer, _In_ LONG cbBuffer) PURE; + STDMETHOD(SetInfo)(THIS_ _In_reads_bytes_(cbInfo) AVISTREAMINFOW *plInfo, _In_ LONG cbInfo) PURE; }; #undef INTERFACE @@ -1039,65 +1193,237 @@ DECLARE_INTERFACE_(IAVIStream,IUnknown) ULONG WINAPI AVIStreamAddRef(PAVISTREAM iface); ULONG WINAPI AVIStreamRelease(PAVISTREAM iface); -HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*); -HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size); -HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size); + +HRESULT +WINAPI +AVIStreamCreate( + _Outptr_ PAVISTREAM*, + _In_ LONG, + _In_ LONG, + _In_opt_ CLSID*); + +HRESULT +WINAPI +AVIStreamInfoA( + _In_ PAVISTREAM iface, + _Out_writes_bytes_(size) AVISTREAMINFOA *asi, + _In_ LONG size); + +HRESULT +WINAPI +AVIStreamInfoW( + _In_ PAVISTREAM iface, + _Out_writes_bytes_(size) AVISTREAMINFOW *asi, + _In_ LONG size); + #define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo) -LONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags); -HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize); -HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize); -HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread); -HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten); -HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread); -HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size); -PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted); -LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos); -HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg); +LONG +WINAPI +AVIStreamFindSample( + _In_ PAVISTREAM pstream, + _In_ LONG pos, + _In_ LONG flags); -HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler); -HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams); -HRESULT WINAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM * ppstream); +HRESULT +WINAPI +AVIStreamReadFormat( + _In_ PAVISTREAM iface, + _In_ LONG pos, + _Out_writes_bytes_to_opt_(*formatsize, *formatsize) LPVOID format, + _Inout_ LONG *formatsize); + +HRESULT +WINAPI +AVIStreamSetFormat( + _In_ PAVISTREAM iface, + _In_ LONG pos, + _In_reads_bytes_(formatsize) LPVOID format, + _In_ LONG formatsize); + +HRESULT +WINAPI +AVIStreamRead( + _In_ PAVISTREAM iface, + _In_ LONG start, + _In_ LONG samples, + _Out_writes_bytes_opt_(buffersize) LPVOID buffer, + _In_ LONG buffersize, + _Out_opt_ LONG *bytesread, + _Out_opt_ LONG *samplesread); + +HRESULT +WINAPI +AVIStreamWrite( + _In_ PAVISTREAM iface, + _In_ LONG start, + _In_ LONG samples, + _In_reads_bytes_(buffersize) LPVOID buffer, + _In_ LONG buffersize, + _In_ DWORD flags, + _Out_opt_ LONG *sampwritten, + _Out_opt_ LONG *byteswritten); + +HRESULT +WINAPI +AVIStreamReadData( + _In_ PAVISTREAM iface, + _In_ DWORD fcc, + _Out_writes_bytes_to_opt_(*lpread, *lpread) LPVOID lp, + _Inout_ LONG *lpread); + +HRESULT +WINAPI +AVIStreamWriteData( + _In_ PAVISTREAM iface, + _In_ DWORD fcc, + _In_reads_bytes_(size) LPVOID lp, + _In_ LONG size); + +PGETFRAME +WINAPI +AVIStreamGetFrameOpen( + _In_ PAVISTREAM pavi, + _In_opt_ LPBITMAPINFOHEADER lpbiWanted); + +LPVOID WINAPI AVIStreamGetFrame(_In_ PGETFRAME pg, _In_ LONG pos); +HRESULT WINAPI AVIStreamGetFrameClose(_In_ PGETFRAME pg); + +HRESULT +WINAPI +AVIMakeCompressedStream( + _Outptr_ PAVISTREAM *ppsCompressed, + _In_ PAVISTREAM ppsSource, + _In_ AVICOMPRESSOPTIONS *lpOptions, + _In_opt_ CLSID *pclsidHandler); + +HRESULT +WINAPI +AVIMakeFileFromStreams( + _Outptr_ PAVIFILE *ppfile, + _In_ int nStreams, + _In_reads_(nStreams) PAVISTREAM *ppStreams); + +HRESULT +WINAPI +AVIMakeStreamFromClipboard( + UINT cfFormat, + _In_ HANDLE hGlobal, + _Outptr_ PAVISTREAM * ppstream); + +HRESULT +WINAPI +AVIStreamOpenFromFileA( + _Outptr_ PAVISTREAM *ppavi, + _In_ LPCSTR szFile, + _In_ DWORD fccType, + _In_ LONG lParam, + _In_ UINT mode, + _In_opt_ CLSID *pclsidHandler); + +HRESULT +WINAPI +AVIStreamOpenFromFileW( + _Outptr_ PAVISTREAM *ppavi, + _In_ LPCWSTR szFile, + _In_ DWORD fccType, + _In_ LONG lParam, + _In_ UINT mode, + _In_opt_ CLSID *pclsidHandler); -HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile, - DWORD fccType, LONG lParam, - UINT mode, CLSID *pclsidHandler); -HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile, - DWORD fccType, LONG lParam, - UINT mode, CLSID *pclsidHandler); #define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile) -LONG WINAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate); -LONG WINAPI AVIStreamEndStreaming(PAVISTREAM pavi); +LONG +WINAPI +AVIStreamBeginStreaming( + _In_ PAVISTREAM pavi, + _In_ LONG lStart, + _In_ LONG lEnd, + _In_ LONG lRate); + +LONG WINAPI AVIStreamEndStreaming(_In_ PAVISTREAM pavi); + +HRESULT +WINAPI +AVIBuildFilterA( + _Out_writes_(cbFilter) LPSTR szFilter, + _In_ LONG cbFilter, + _In_ BOOL fSaving); + +HRESULT +WINAPI +AVIBuildFilterW( + _Out_writes_(cbFilter) LPWSTR szFilter, + _In_ LONG cbFilter, + _In_ BOOL fSaving); -HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving); -HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving); #define AVIBuildFilter WINELIB_NAME_AW(AVIBuildFilter) -BOOL WINAPI AVISaveOptions(HWND hWnd,UINT uFlags,INT nStream, - PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *ppOptions); -HRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions); +BOOL +WINAPI +AVISaveOptions( + _In_ HWND hWnd, + _In_ UINT uFlags, + _In_ INT nStream, + _In_reads_(nStream) PAVISTREAM *ppavi, + _Inout_updates_(nStream) LPAVICOMPRESSOPTIONS *ppOptions); + +HRESULT +WINAPI +AVISaveOptionsFree( + INT nStreams, + _In_reads_(nStreams) LPAVICOMPRESSOPTIONS *ppOptions); + +HRESULT +CDECL +AVISaveA( + LPCSTR szFile, + _In_opt_ CLSID *pclsidHandler, + _In_ AVISAVECALLBACK lpfnCallback, + _In_ int nStreams, + _In_ PAVISTREAM pavi, + _In_ LPAVICOMPRESSOPTIONS lpOptions, + ...); + +HRESULT +CDECL +AVISaveW( + LPCWSTR szFile, + _In_opt_ CLSID *pclsidHandler, + _In_ AVISAVECALLBACK lpfnCallback, + _In_ int nStreams, + _In_ PAVISTREAM pavi, + _In_ LPAVICOMPRESSOPTIONS lpOptions, + ...); -HRESULT CDECL AVISaveA(LPCSTR szFile, CLSID *pclsidHandler, - AVISAVECALLBACK lpfnCallback, int nStreams, - PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...); -HRESULT CDECL AVISaveW(LPCWSTR szFile, CLSID *pclsidHandler, - AVISAVECALLBACK lpfnCallback, int nStreams, - PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...); #define AVISave WINELIB_NAME_AW(AVISave) -HRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler, - AVISAVECALLBACK lpfnCallback, int nStream, - PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions); -HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler, - AVISAVECALLBACK lpfnCallback, int nStream, - PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions); +HRESULT +WINAPI +AVISaveVA( + LPCSTR szFile, + _In_opt_ CLSID *pclsidHandler, + _In_ AVISAVECALLBACK lpfnCallback, + _In_ int nStream, + _In_reads_(nStream) PAVISTREAM *ppavi, + _In_reads_(nStream) LPAVICOMPRESSOPTIONS *plpOptions); + +HRESULT +WINAPI +AVISaveVW( + LPCWSTR szFile, + _In_opt_ CLSID *pclsidHandler, + _In_ AVISAVECALLBACK lpfnCallback, + _In_ int nStream, + _In_reads_(nStream) PAVISTREAM *ppavi, + _In_reads_(nStream) LPAVICOMPRESSOPTIONS *plpOptions); + #define AVISaveV WINELIB_NAME_AW(AVISaveV) -LONG WINAPI AVIStreamStart(PAVISTREAM iface); -LONG WINAPI AVIStreamLength(PAVISTREAM iface); -LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample); -LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime); +LONG WINAPI AVIStreamStart(_In_ PAVISTREAM iface); +LONG WINAPI AVIStreamLength(_In_ PAVISTREAM iface); +LONG WINAPI AVIStreamSampleToTime(_In_ PAVISTREAM pstream, _In_ LONG lSample); +LONG WINAPI AVIStreamTimeToSample(_In_ PAVISTREAM pstream, _In_ LONG lTime); #define AVIFileClose(pavi) \ AVIFileRelease(pavi) @@ -1140,12 +1466,12 @@ LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime); DECLARE_INTERFACE_(IAVIStreaming,IUnknown) { /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, _Outptr_ void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIStreaming methods ***/ - STDMETHOD(Begin)(IAVIStreaming*iface,LONG lStart,LONG lEnd,LONG lRate) PURE; - STDMETHOD(End)(IAVIStreaming*iface) PURE; + STDMETHOD(Begin)(IAVIStreaming *iface, _In_ LONG lStart, _In_ LONG lEnd, _In_ LONG lRate) PURE; + STDMETHOD(End)(IAVIStreaming *iface) PURE; }; #undef INTERFACE @@ -1166,15 +1492,15 @@ DECLARE_INTERFACE_(IAVIStreaming,IUnknown) DECLARE_INTERFACE_(IAVIEditStream,IUnknown) { /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, _Outptr_ void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIEditStream methods ***/ - STDMETHOD(Cut)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE; - STDMETHOD(Copy)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE; - STDMETHOD(Paste)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM pSource,LONG lStart,LONG lEnd) PURE; - STDMETHOD(Clone)(IAVIEditStream*iface,PAVISTREAM*ppResult) PURE; - STDMETHOD(SetInfo)(IAVIEditStream*iface,LPAVISTREAMINFOW asi, LONG size) PURE; + STDMETHOD(Cut)(IAVIEditStream *iface, _Inout_ LONG *plStart, _Inout_ LONG *plLength, _Outptr_ PAVISTREAM *ppResult) PURE; + STDMETHOD(Copy)(IAVIEditStream *iface, _Inout_ LONG *plStart, _Inout_ LONG *plLength, _Outptr_ PAVISTREAM *ppResult) PURE; + STDMETHOD(Paste)(IAVIEditStream *iface, _Inout_ LONG *plStart, _Inout_ LONG *plLength, _Inout_ PAVISTREAM pSource, _In_ LONG lStart, _In_ LONG lEnd) PURE; + STDMETHOD(Clone)(IAVIEditStream *iface, _Outptr_ PAVISTREAM *ppResult) PURE; + STDMETHOD(SetInfo)(IAVIEditStream *iface, _In_reads_bytes_(size) LPAVISTREAMINFOW asi, _In_ LONG size) PURE; }; #undef INTERFACE @@ -1191,23 +1517,62 @@ DECLARE_INTERFACE_(IAVIEditStream,IUnknown) #define IAVIEditStream_SetInfo(p,a,b) (p)->lpVtbl->SetInfo(p,a,b) #endif -HRESULT WINAPI CreateEditableStream(PAVISTREAM *ppEditable,PAVISTREAM pSource); -HRESULT WINAPI EditStreamClone(PAVISTREAM pStream, PAVISTREAM *ppResult); -HRESULT WINAPI EditStreamCopy(PAVISTREAM pStream, LONG *plStart, - LONG *plLength, PAVISTREAM *ppResult); -HRESULT WINAPI EditStreamCut(PAVISTREAM pStream, LONG *plStart, - LONG *plLength, PAVISTREAM *ppResult); -HRESULT WINAPI EditStreamPaste(PAVISTREAM pDest, LONG *plStart, LONG *plLength, - PAVISTREAM pSource, LONG lStart, LONG lEnd); +HRESULT +WINAPI +CreateEditableStream( + _Outptr_ PAVISTREAM *ppEditable, + _In_ PAVISTREAM pSource); + +HRESULT +WINAPI +EditStreamClone( + _In_ PAVISTREAM pStream, + _Outptr_ PAVISTREAM *ppResult); + +HRESULT +WINAPI +EditStreamCopy( + _In_ PAVISTREAM pStream, + _Inout_ LONG *plStart, + _Inout_ LONG *plLength, + _Outptr_ PAVISTREAM *ppResult); + +HRESULT +WINAPI +EditStreamCut( + _In_ PAVISTREAM pStream, + _Inout_ LONG *plStart, + _Inout_ LONG *plLength, + _Outptr_ PAVISTREAM *ppResult); + +HRESULT +WINAPI +EditStreamPaste( + _In_ PAVISTREAM pDest, + _Inout_ LONG *plStart, + _Inout_ LONG *plLength, + _In_ PAVISTREAM pSource, + _In_ LONG lStart, + _In_ LONG lEnd); + +HRESULT +WINAPI +EditStreamSetInfoA( + _In_ PAVISTREAM pstream, + _In_reads_bytes_(size) LPAVISTREAMINFOA asi, + _In_ LONG size); + +HRESULT +WINAPI +EditStreamSetInfoW( + _In_ PAVISTREAM pstream, + _In_reads_bytes_(size) LPAVISTREAMINFOW asi, + _In_ LONG size); -HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi, - LONG size); -HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, - LONG size); #define EditStreamSetInfo WINELIB_NAME_AW(EditStreamSetInfo) -HRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, LPCSTR szName); -HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName); +HRESULT WINAPI EditStreamSetNameA(_In_ PAVISTREAM pstream, _In_ LPCSTR szName); +HRESULT WINAPI EditStreamSetNameW(_In_ PAVISTREAM pstream, _In_ LPCWSTR szName); #define EditStreamSetName WINELIB_NAME_AW(EditStreamSetName) /***************************************************************************** @@ -1218,17 +1583,17 @@ HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName); DECLARE_INTERFACE_(IAVIFile,IUnknown) { /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, _Outptr_ void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIFile methods ***/ - STDMETHOD(Info)(THIS_ AVIFILEINFOW *pfi, LONG lSize) PURE; - STDMETHOD(GetStream)(THIS_ PAVISTREAM *ppStream, DWORD fccType, LONG lParam) PURE; - STDMETHOD(CreateStream)(THIS_ PAVISTREAM *ppStream, AVISTREAMINFOW *psi) PURE; - STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE; - STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE; + STDMETHOD(Info)(THIS_ _Out_writes_bytes_(lSize) AVIFILEINFOW *pfi, _In_ LONG lSize) PURE; + STDMETHOD(GetStream)(THIS_ _Outptr_ PAVISTREAM *ppStream, _In_ DWORD fccType, _In_ LONG lParam) PURE; + STDMETHOD(CreateStream)(THIS_ _Outptr_ PAVISTREAM *ppStream, _In_ AVISTREAMINFOW *psi) PURE; + STDMETHOD(WriteData)(THIS_ _In_ DWORD fcc, _In_reads_bytes_(cbBuffer) LPVOID lpBuffer, _In_ LONG cbBuffer) PURE; + STDMETHOD(ReadData)(THIS_ _In_ DWORD fcc, _Out_writes_bytes_to_(*lpcbBuffer, *lpcbBuffer) LPVOID lpBuffer, _Inout_ LONG *lpcbBuffer) PURE; STDMETHOD(EndRecord)(THIS) PURE; - STDMETHOD(DeleteStream)(THIS_ DWORD fccType, LONG lParam) PURE; + STDMETHOD(DeleteStream)(THIS_ _In_ DWORD fccType, _In_ LONG lParam) PURE; }; #undef INTERFACE @@ -1250,22 +1615,84 @@ DECLARE_INTERFACE_(IAVIFile,IUnknown) void WINAPI AVIFileInit(void); void WINAPI AVIFileExit(void); -HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler); -HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler); +HRESULT +WINAPI +AVIFileOpenA( + _Outptr_ PAVIFILE* ppfile, + _In_ LPCSTR szFile, + UINT uMode, + _In_opt_ LPCLSID lpHandler); + +HRESULT +WINAPI +AVIFileOpenW( + _Outptr_ PAVIFILE* ppfile, + _In_ LPCWSTR szFile, + UINT uMode, + _In_opt_ LPCLSID lpHandler); + #define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen) ULONG WINAPI AVIFileAddRef(PAVIFILE pfile); ULONG WINAPI AVIFileRelease(PAVIFILE pfile); -HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize); -HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize); + +HRESULT +WINAPI +AVIFileInfoA( + _In_ PAVIFILE pfile, + _Out_writes_bytes_(lSize) PAVIFILEINFOA pfi, + _In_ LONG lSize); + +HRESULT +WINAPI +AVIFileInfoW( + _In_ PAVIFILE pfile, + _Out_writes_bytes_(lSize) PAVIFILEINFOW pfi, + _In_ LONG lSize); + #define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo) -HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam); -HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi); -HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi); + +HRESULT +WINAPI +AVIFileGetStream( + _In_ PAVIFILE pfile, + _Outptr_ PAVISTREAM* avis, + _In_ DWORD fccType, + _In_ LONG lParam); + +HRESULT +WINAPI +AVIFileCreateStreamA( + _In_ PAVIFILE pfile, + _Outptr_ PAVISTREAM* ppavi, + _In_ AVISTREAMINFOA* psi); + +HRESULT +WINAPI +AVIFileCreateStreamW( + _In_ PAVIFILE pfile, + _Outptr_ PAVISTREAM* ppavi, + _In_ AVISTREAMINFOW* psi); + #define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream) -HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size); -HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size); -HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile); + +HRESULT +WINAPI +AVIFileWriteData( + _In_ PAVIFILE pfile, + _In_ DWORD fcc, + _In_reads_bytes_(size) LPVOID lp, + _In_ LONG size); + +HRESULT +WINAPI +AVIFileReadData( + _In_ PAVIFILE pfile, + _In_ DWORD fcc, + _Out_writes_bytes_to_(*size, *size) LPVOID lp, + _Inout_ LPLONG size); + +HRESULT WINAPI AVIFileEndRecord(_In_ PAVIFILE pfile); /***************************************************************************** * IGetFrame interface @@ -1274,14 +1701,14 @@ HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile); DECLARE_INTERFACE_(IGetFrame,IUnknown) { /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, _Outptr_ void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IGetFrame methods ***/ - STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG lPos) PURE; - STDMETHOD(Begin)(THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE; + STDMETHOD_(LPVOID,GetFrame)(THIS_ _In_ LONG lPos) PURE; + STDMETHOD(Begin)(THIS_ _In_ LONG lStart, _In_ LONG lEnd, _In_ LONG lRate) PURE; STDMETHOD(End)(THIS) PURE; - STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT x, INT y, INT dx, INT dy) PURE; + STDMETHOD(SetFormat)(THIS_ _In_ LPBITMAPINFOHEADER lpbi, _In_opt_ LPVOID lpBits, _In_ INT x, _In_ INT y, _In_ INT dx, _In_ INT dy) PURE; }; #undef INTERFACE @@ -1298,15 +1725,15 @@ DECLARE_INTERFACE_(IGetFrame,IUnknown) #endif HRESULT WINAPI AVIClearClipboard(void); -HRESULT WINAPI AVIGetFromClipboard(PAVIFILE *ppfile); -HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile); +HRESULT WINAPI AVIGetFromClipboard(_Outptr_ PAVIFILE *ppfile); +HRESULT WINAPI AVIPutFileOnClipboard(_In_ PAVIFILE pfile); #ifdef OFN_READONLY -BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn); -BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn); +BOOL WINAPI GetOpenFileNamePreviewA(_Inout_ LPOPENFILENAMEA lpofn); +BOOL WINAPI GetOpenFileNamePreviewW(_Inout_ LPOPENFILENAMEW lpofn); #define GetOpenFileNamePreview WINELIB_NAME_AW(GetOpenFileNamePreview) -BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn); -BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn); +BOOL WINAPI GetSaveFileNamePreviewA(_Inout_ LPOPENFILENAMEA lpofn); +BOOL WINAPI GetSaveFileNamePreviewW(_Inout_ LPOPENFILENAMEW lpofn); #define GetSaveFileNamePreview WINELIB_NAME_AW(GetSaveFileNamePreview) #endif @@ -1335,9 +1762,23 @@ BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn); BOOL VFWAPIV MCIWndRegisterClass(void); -HWND VFWAPIV MCIWndCreateA(HWND, HINSTANCE, DWORD, LPCSTR); -HWND VFWAPIV MCIWndCreateW(HWND, HINSTANCE, DWORD, LPCWSTR); -#define MCIWndCreate WINELIB_NAME_AW(MCIWndCreate) +HWND +VFWAPIV +MCIWndCreateA( + _In_opt_ HWND, + _In_opt_ HINSTANCE, + _In_ DWORD, + _In_opt_ LPCSTR); + +HWND +VFWAPIV +MCIWndCreateW( + _In_opt_ HWND, + _In_opt_ HINSTANCE, + _In_ DWORD, + _In_opt_ LPCWSTR); + +#define MCIWndCreate WINELIB_NAME_AW(MCIWndCreate) #define MCIWNDOPENF_NEW 0x0001 @@ -1574,14 +2015,42 @@ typedef struct } DRAWDIBTIME, *LPDRAWDIBTIME; HDRAWDIB VFWAPI DrawDibOpen( void ); -UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground); -BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst, - LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags); +UINT +VFWAPI +DrawDibRealize( + _In_ HDRAWDIB hdd, + _In_ HDC hdc, + _In_ BOOL fBackground); -BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst, - LPBITMAPINFOHEADER lpbi, LPVOID lpBits, - INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags); +BOOL +VFWAPI +DrawDibBegin( + _In_ HDRAWDIB hdd, + _In_opt_ HDC hdc, + _In_ INT dxDst, + _In_ INT dyDst, + _In_ LPBITMAPINFOHEADER lpbi, + _In_ INT dxSrc, + _In_ INT dySrc, + _In_ UINT wFlags); + +BOOL +VFWAPI +DrawDibDraw( + _In_ HDRAWDIB hdd, + _In_ HDC hdc, + _In_ INT xDst, + _In_ INT yDst, + _In_ INT dxDst, + _In_ INT dyDst, + _In_opt_ LPBITMAPINFOHEADER lpbi, + _In_opt_ LPVOID lpBits, + _In_ INT xSrc, + _In_ INT ySrc, + _In_ INT dxSrc, + _In_ INT dySrc, + _In_ UINT wFlags); /* DrawDibDraw flags */ @@ -1602,19 +2071,34 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, IN #define DDF_SAME_DIB DDF_SAME_DRAW #define DDF_SAME_SIZE DDF_SAME_DRAW -BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal); -HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd); -BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe); -LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags); +BOOL VFWAPI DrawDibSetPalette(_In_ HDRAWDIB hdd, _In_opt_ HPALETTE hpal); +HPALETTE VFWAPI DrawDibGetPalette(_In_ HDRAWDIB hdd); + +BOOL +VFWAPI +DrawDibChangePalette( + _In_ HDRAWDIB hdd, + _In_ int iStart, + _In_ int iLen, + _In_reads_(iLen) LPPALETTEENTRY lppe); + +LPVOID +VFWAPI +DrawDibGetBuffer( + _In_ HDRAWDIB hdd, + _Out_ LPBITMAPINFOHEADER lpbi, + _In_ DWORD dwSize, + _In_ DWORD dwFlags); + +BOOL VFWAPI DrawDibStart(_In_ HDRAWDIB hdd, _In_ DWORD rate); +BOOL VFWAPI DrawDibStop(_In_ HDRAWDIB hdd); -BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate); -BOOL VFWAPI DrawDibStop(HDRAWDIB hdd); #define DrawDibUpdate(hdd, hdc, x, y) \ DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE) -BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd); -BOOL VFWAPI DrawDibClose(HDRAWDIB hdd); -BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime); +BOOL VFWAPI DrawDibEnd(_In_ HDRAWDIB hdd); +BOOL VFWAPI DrawDibClose(_In_ HDRAWDIB hdd); +BOOL VFWAPI DrawDibTime(_In_ HDRAWDIB hdd, _Out_ LPDRAWDIBTIME lpddtime); /* display profiling */ #define PD_CAN_DRAW_DIB 0x0001 @@ -1623,7 +2107,7 @@ BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime); #define PD_STRETCHDIB_1_2_OK 0x0008 #define PD_STRETCHDIB_1_N_OK 0x0010 -DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi); +DWORD VFWAPI DrawDibProfileDisplay(_In_ LPBITMAPINFOHEADER lpbi); DECLARE_HANDLE(HVIDEO); typedef HVIDEO *LPHVIDEO; @@ -1917,21 +2401,92 @@ typedef struct tagCaptureParms { UINT AVStreamMaster; } CAPTUREPARMS, *PCAPTUREPARMS, *LPCAPTUREPARMS; -typedef LRESULT (CALLBACK* CAPYIELDCALLBACK) (HWND hWnd); -typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz); -typedef LRESULT (CALLBACK* CAPERRORCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz); -typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz); -typedef LRESULT (CALLBACK* CAPERRORCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz); -typedef LRESULT (CALLBACK* CAPVIDEOCALLBACK) (HWND hWnd, LPVIDEOHDR lpVHdr); -typedef LRESULT (CALLBACK* CAPWAVECALLBACK) (HWND hWnd, LPWAVEHDR lpWHdr); -typedef LRESULT (CALLBACK* CAPCONTROLCALLBACK)(HWND hWnd, int nState); +typedef LRESULT (CALLBACK* CAPYIELDCALLBACK)(_In_ HWND hWnd); -HWND VFWAPI capCreateCaptureWindowA(LPCSTR,DWORD,INT,INT,INT,INT,HWND,INT); -HWND VFWAPI capCreateCaptureWindowW(LPCWSTR,DWORD,INT,INT,INT,INT,HWND,INT); -#define capCreateCaptureWindow WINELIB_NAME_AW(capCreateCaptureWindow) -BOOL VFWAPI capGetDriverDescriptionA(WORD,LPSTR,INT,LPSTR,INT); -BOOL VFWAPI capGetDriverDescriptionW(WORD,LPWSTR,INT,LPWSTR,INT); -#define capGetDriverDescription WINELIB_NAME_AW(capGetDriverDescription) +typedef LRESULT +(CALLBACK* CAPSTATUSCALLBACKW)( + _In_ HWND hWnd, + _In_ int nID, + _In_ LPCWSTR lpsz); + +typedef LRESULT +(CALLBACK* CAPERRORCALLBACKW)( + _In_ HWND hWnd, + _In_ int nID, + LPCWSTR lpsz); + +typedef LRESULT +(CALLBACK* CAPSTATUSCALLBACKA)( + _In_ HWND hWnd, + _In_ int nID, + LPCSTR lpsz); + +typedef LRESULT +(CALLBACK* CAPERRORCALLBACKA)( + _In_ HWND hWnd, + _In_ int nID, + LPCSTR lpsz); + +typedef LRESULT +(CALLBACK* CAPVIDEOCALLBACK)( + _In_ HWND hWnd, + _In_ LPVIDEOHDR lpVHdr); + +typedef LRESULT +(CALLBACK* CAPWAVECALLBACK)( + _In_ HWND hWnd, + _In_ LPWAVEHDR lpWHdr); + +typedef LRESULT +(CALLBACK* CAPCONTROLCALLBACK)( + _In_ HWND hWnd, + _In_ int nState); + +HWND +VFWAPI +capCreateCaptureWindowA( + LPCSTR, + _In_ DWORD, + _In_ INT, + _In_ INT, + _In_ INT, + _In_ INT, + _In_opt_ HWND, + _In_ INT); + +HWND +VFWAPI +capCreateCaptureWindowW( + LPCWSTR, + _In_ DWORD, + _In_ INT, + _In_ INT, + _In_ INT, + _In_ INT, + _In_opt_ HWND, + _In_ INT); + +#define capCreateCaptureWindow WINELIB_NAME_AW(capCreateCaptureWindow) + +BOOL +VFWAPI +capGetDriverDescriptionA( + WORD, + _Out_writes_(cbName) LPSTR, + _In_ INT cbName, + _Out_writes_(cbVer) LPSTR, + _In_ INT cbVer); + +BOOL +VFWAPI +capGetDriverDescriptionW( + WORD, + _Out_writes_(cbName) LPWSTR, + _In_ INT cbName, + _Out_writes_(cbVer) LPWSTR, + _In_ INT cbVer); + +#define capGetDriverDescription WINELIB_NAME_AW(capGetDriverDescription) #ifdef __cplusplus } From 38c812cfc9a448ba7ff8e438bece2c3375036bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 12 Aug 2013 16:12:58 +0000 Subject: [PATCH 21/68] [KERNEL32][CONSRV] Half-plement SetConsolePalette. svn path=/trunk/; revision=59711 --- .../win32/kernel32/client/console/console.c | 23 +++++++++++--- reactos/win32ss/user/winsrv/consrv/api.h | 1 + .../user/winsrv/consrv/condrv/conoutput.c | 10 +++++++ .../win32ss/user/winsrv/consrv/conoutput.c | 30 +++++++++++++++++++ .../win32ss/user/winsrv/consrv/frontendctl.c | 2 +- reactos/win32ss/user/winsrv/consrv/init.c | 6 ++-- 6 files changed, 64 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/kernel32/client/console/console.c b/reactos/dll/win32/kernel32/client/console/console.c index 6b438749149..8e76da6abe6 100644 --- a/reactos/dll/win32/kernel32/client/console/console.c +++ b/reactos/dll/win32/kernel32/client/console/console.c @@ -711,7 +711,7 @@ SetConsoleMenuClose(BOOL bEnable) /* - * @unimplemented (Undocumented) + * @implemented (Undocumented) * @note See http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 * Usage example: https://github.com/harbour/core/commit/d79a1b7b812cbde6ddf718ebfd6939a24f633e52 */ @@ -721,9 +721,24 @@ SetConsolePalette(HANDLE hConsoleOutput, HPALETTE hPalette, UINT dwUsage) { - DPRINT1("SetConsolePalette(0x%x, 0x%x, %d) UNIMPLEMENTED!\n", hConsoleOutput, hPalette, dwUsage); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - // Return TRUE so that we don't fail when being used by NTVDM even if not implemented. + NTSTATUS Status; + CONSOLE_API_MESSAGE ApiMessage; + PCONSOLE_SETPALETTE SetPaletteRequest = &ApiMessage.Data.SetPaletteRequest; + + SetPaletteRequest->OutputHandle = hConsoleOutput; + SetPaletteRequest->PaletteHandle = hPalette; + SetPaletteRequest->Usage = dwUsage; + + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, + NULL, + CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetPalette), + sizeof(CONSOLE_SETPALETTE)); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } + return TRUE; } diff --git a/reactos/win32ss/user/winsrv/consrv/api.h b/reactos/win32ss/user/winsrv/consrv/api.h index a7f340bc742..80c24ac1577 100644 --- a/reactos/win32ss/user/winsrv/consrv/api.h +++ b/reactos/win32ss/user/winsrv/consrv/api.h @@ -25,6 +25,7 @@ CSR_API(SrvGetConsoleNumberOfInputEvents); /* conoutput.c */ CSR_API(SrvInvalidateBitMapRect); +CSR_API(SrvSetConsolePalette); CSR_API(SrvReadConsoleOutput); CSR_API(SrvWriteConsole); CSR_API(SrvWriteConsoleOutput); diff --git a/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c b/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c index 03d5745f754..e0c4340f1d8 100644 --- a/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c +++ b/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c @@ -203,6 +203,16 @@ ConDrvInvalidateBitMapRect(IN PCONSOLE Console, return STATUS_SUCCESS; } +NTSTATUS NTAPI +ConDrvSetConsolePalette(IN PCONSOLE Console, + IN PGRAPHICS_SCREEN_BUFFER Buffer, + IN HPALETTE PaletteHandle, + IN UINT Usage) +{ + DPRINT1("ConDrvSetConsolePalette is UNIMPLEMENTED but returns STATUS_SUCCESS\n"); + return STATUS_SUCCESS; +} + NTSTATUS NTAPI ConDrvGetConsoleCursorInfo(IN PCONSOLE Console, IN PTEXTMODE_SCREEN_BUFFER Buffer, diff --git a/reactos/win32ss/user/winsrv/consrv/conoutput.c b/reactos/win32ss/user/winsrv/consrv/conoutput.c index 223f6caf781..af3325a1a48 100644 --- a/reactos/win32ss/user/winsrv/consrv/conoutput.c +++ b/reactos/win32ss/user/winsrv/consrv/conoutput.c @@ -50,6 +50,36 @@ CSR_API(SrvInvalidateBitMapRect) return Status; } +NTSTATUS NTAPI +ConDrvSetConsolePalette(IN PCONSOLE Console, + IN PGRAPHICS_SCREEN_BUFFER Buffer, + IN HPALETTE PaletteHandle, + IN UINT Usage); +CSR_API(SrvSetConsolePalette) +{ + NTSTATUS Status; + PCONSOLE_SETPALETTE SetPaletteRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetPaletteRequest; + // PCONSOLE_SCREEN_BUFFER Buffer; + PGRAPHICS_SCREEN_BUFFER Buffer; + + DPRINT("SrvSetConsolePalette\n"); + + // NOTE: Tests show that this function is used only for graphics screen buffers + // and otherwise it returns false + sets last error to invalid handle. + Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), + SetPaletteRequest->OutputHandle, + &Buffer, GENERIC_WRITE, TRUE); + if (!NT_SUCCESS(Status)) return Status; + + Status = ConDrvSetConsolePalette(Buffer->Header.Console, + Buffer, + SetPaletteRequest->PaletteHandle, + SetPaletteRequest->Usage); + + ConSrvReleaseScreenBuffer(Buffer, TRUE); + return Status; +} + NTSTATUS NTAPI ConDrvGetConsoleCursorInfo(IN PCONSOLE Console, IN PTEXTMODE_SCREEN_BUFFER Buffer, diff --git a/reactos/win32ss/user/winsrv/consrv/frontendctl.c b/reactos/win32ss/user/winsrv/consrv/frontendctl.c index 92c147a5a36..f6e148fc4a9 100644 --- a/reactos/win32ss/user/winsrv/consrv/frontendctl.c +++ b/reactos/win32ss/user/winsrv/consrv/frontendctl.c @@ -220,7 +220,7 @@ CSR_API(SrvSetConsoleCursor) PCONSOLE_SCREEN_BUFFER Buff; // FIXME: Tests show that this function is used only for graphics screen buffers - // and otherwise it returns false + set last error to invalid handle. + // and otherwise it returns false + sets last error to invalid handle. // NOTE: I find that behaviour is ridiculous but ok, let's accept that at the moment... Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), SetCursorRequest->OutputHandle, diff --git a/reactos/win32ss/user/winsrv/consrv/init.c b/reactos/win32ss/user/winsrv/consrv/init.c index 1cc32b6acd9..a1ba2357a99 100644 --- a/reactos/win32ss/user/winsrv/consrv/init.c +++ b/reactos/win32ss/user/winsrv/consrv/init.c @@ -75,7 +75,7 @@ PCSR_API_ROUTINE ConsoleServerApiDispatchTable[ConsolepMaxApiNumber - CONSRV_FIR SrvSetConsoleCursor, SrvShowConsoleCursor, SrvConsoleMenuControl, - // SrvSetConsolePalette, + SrvSetConsolePalette, SrvSetConsoleDisplayMode, // SrvRegisterConsoleVDM, SrvGetConsoleHardwareState, @@ -166,7 +166,7 @@ BOOLEAN ConsoleServerApiServerValidTable[ConsolepMaxApiNumber - CONSRV_FIRST_API FALSE, // SrvSetConsoleCursor, FALSE, // SrvShowConsoleCursor, FALSE, // SrvConsoleMenuControl, - // FALSE, // SrvSetConsolePalette, + FALSE, // SrvSetConsolePalette, FALSE, // SrvSetConsoleDisplayMode, // FALSE, // SrvRegisterConsoleVDM, FALSE, // SrvGetConsoleHardwareState, @@ -257,7 +257,7 @@ PCHAR ConsoleServerApiNameTable[ConsolepMaxApiNumber - CONSRV_FIRST_API_NUMBER] "SetConsoleCursor", "ShowConsoleCursor", "ConsoleMenuControl", - // "SetConsolePalette", + "SetConsolePalette", "SetConsoleDisplayMode", // "RegisterConsoleVDM", "GetConsoleHardwareState", From c746456035f53ec345a16e5ae6c8178c35a2def1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 12 Aug 2013 16:15:44 +0000 Subject: [PATCH 22/68] Forgot this file (fixes all the builds). svn path=/trunk/; revision=59712 --- reactos/include/reactos/subsys/win/conmsg.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/reactos/include/reactos/subsys/win/conmsg.h b/reactos/include/reactos/subsys/win/conmsg.h index 06cb931fc1c..08671639773 100644 --- a/reactos/include/reactos/subsys/win/conmsg.h +++ b/reactos/include/reactos/subsys/win/conmsg.h @@ -65,7 +65,7 @@ typedef enum _CONSRV_API_NUMBER ConsolepSetCursor, ConsolepShowCursor, ConsolepMenuControl, - // ConsolepSetPalette, + ConsolepSetPalette, ConsolepSetDisplayMode, // ConsolepRegisterVDM, ConsolepGetHardwareState, @@ -303,6 +303,13 @@ typedef struct SMALL_RECT Region; } CONSOLE_INVALIDATEDIBITS, *PCONSOLE_INVALIDATEDIBITS; +typedef struct +{ + HANDLE OutputHandle; + HPALETTE PaletteHandle; + UINT Usage; +} CONSOLE_SETPALETTE, *PCONSOLE_SETPALETTE; + typedef struct { DWORD Length; @@ -664,6 +671,7 @@ typedef struct _CONSOLE_API_MESSAGE /* Console window */ CONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest; + CONSOLE_SETPALETTE SetPaletteRequest; CONSOLE_GETSETCONSOLETITLE TitleRequest; CONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest; CONSOLE_MENUCONTROL MenuControlRequest; From 11a9057ed5f8a95410f0bfbe309d751d28e45cbc Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 12 Aug 2013 22:08:17 +0000 Subject: [PATCH 23/68] [PSDK] * Update shlwapi.h. * Remove IUnknown_AtomicRelease() from shlwapi_undoc.h. svn path=/trunk/; revision=59714 --- reactos/include/psdk/shlwapi.h | 26 +++++++++++++++++++++----- reactos/include/psdk/shlwapi_undoc.h | 1 - 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/reactos/include/psdk/shlwapi.h b/reactos/include/psdk/shlwapi.h index e1740a9ae3e..db20e96b525 100644 --- a/reactos/include/psdk/shlwapi.h +++ b/reactos/include/psdk/shlwapi.h @@ -319,7 +319,11 @@ BOOL WINAPI AssocIsDangerous(LPCWSTR); #endif /* NO_SHLWAPI_REG */ +void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk); +void WINAPI IUnknown_AtomicRelease(IUnknown **punk); +HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd); HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite); +HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv); HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut); /* Path functions */ @@ -368,16 +372,18 @@ int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR); int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,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(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl) +HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD); + BOOL WINAPI PathFileExistsA(LPCSTR); BOOL WINAPI PathFileExistsW(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); @@ -697,7 +703,7 @@ BOOL WINAPI UrlIsOpaqueW(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); @@ -877,6 +883,9 @@ LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR); LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR); #define StrStrI WINELIB_NAME_AW(StrStrI) +LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT); +LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT); + int WINAPI StrToIntA(LPCSTR); int WINAPI StrToIntW(LPCWSTR); #define StrToInt WINELIB_NAME_AW(StrToInt) @@ -926,6 +935,10 @@ HRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*); +BOOL WINAPI IsCharSpaceA(CHAR); +BOOL WINAPI IsCharSpaceW(WCHAR); +#define IsCharSpace WINELIB_NAME_AW(IsCharSpace) + #endif /* NO_SHLWAPI_STRFCNS */ @@ -942,6 +955,8 @@ VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD); #endif /* NO_SHLWAPI_GDI */ +/* Security functions */ +BOOL WINAPI IsInternetESCEnabled(void); /* Stream functions */ #ifndef NO_SHLWAPI_STREAM @@ -981,6 +996,7 @@ HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); HRESULT WINAPI SHAutoComplete(HWND,DWORD); /* Threads */ +HRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**); HRESULT WINAPI SHGetThreadRef(IUnknown**); HRESULT WINAPI SHSetThreadRef(IUnknown*); HRESULT WINAPI SHReleaseThreadRef(void); diff --git a/reactos/include/psdk/shlwapi_undoc.h b/reactos/include/psdk/shlwapi_undoc.h index 50eef6bf863..a37237d910b 100644 --- a/reactos/include/psdk/shlwapi_undoc.h +++ b/reactos/include/psdk/shlwapi_undoc.h @@ -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); From 8bbf3b5415a79518c74e9822b874bd8bd717efdf Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 12 Aug 2013 22:19:46 +0000 Subject: [PATCH 24/68] [PSDK] * Annotate shlobj.h. svn path=/trunk/; revision=59715 --- reactos/include/psdk/shlobj.h | 662 +++++++++++++++++++++++++--------- 1 file changed, 495 insertions(+), 167 deletions(-) diff --git a/reactos/include/psdk/shlobj.h b/reactos/include/psdk/shlobj.h index 59824947499..ec885faa2e4 100644 --- a/reactos/include/psdk/shlobj.h +++ b/reactos/include/psdk/shlobj.h @@ -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 @@ -880,7 +1013,11 @@ typedef struct _CSFV #include -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 -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 @@ -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 -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) +HRESULT +WINAPI +SHGetDataFromIDListA( + _In_ LPSHELLFOLDER psf, + _In_ LPCITEMIDLIST pidl, + int nFormat, + _Out_writes_bytes_(cb) LPVOID pv, + int cb); -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 +SHGetDataFromIDListW( + _In_ LPSHELLFOLDER psf, + _In_ LPCITEMIDLIST pidl, + int nFormat, + _Out_writes_bytes_(cb) LPVOID pv, + int cb); -HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ; +#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); -BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID); -HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId, - LPITEMIDLIST **pppidl, LONG *plEvent); -BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock); +ULONG +WINAPI +SHChangeNotifyRegister( + _In_ HWND hwnd, + int fSources, + LONG fEvents, + UINT wMsg, + int cEntries, + _In_ SHChangeNotifyEntry *pshcne); -HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal); +BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID); + +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 @@ -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 From f762bc3a749c1eea58b4197354d74339183cefa7 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Tue, 13 Aug 2013 03:11:02 +0000 Subject: [PATCH 25/68] [USETUP]: Add an entry in freeldr.ini for EMS testing. [HIVESYS]: Fix double-addition of "nmidebug". One of those should have been "sacdrv". [FREELDR]: Fix bugs in WinLdrSetupEms which caused an invalid HEADLESS_LOADER_BLOCK to be created. [FERELDR]: Move WinLdrSetupEms in LoadWindowsCommon, so that setupldr can use EMS too. svn path=/trunk/; revision=59716 --- reactos/base/setup/usetup/bootsup.c | 8 +++++++- reactos/boot/bootdata/hivesys.inf | 10 +++++----- reactos/boot/freeldr/freeldr/windows/headless.c | 4 +++- reactos/boot/freeldr/freeldr/windows/winldr.c | 10 +++++----- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/reactos/base/setup/usetup/bootsup.c b/reactos/base/setup/usetup/bootsup.c index 0c05cbb7ec0..9865e265ab3 100644 --- a/reactos/base/setup/usetup/bootsup.c +++ b/reactos/base/setup/usetup/bootsup.c @@ -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 */ diff --git a/reactos/boot/bootdata/hivesys.inf b/reactos/boot/bootdata/hivesys.inf index 5c5f94e0b4e..751e1df160f 100644 --- a/reactos/boot/bootdata/hivesys.inf +++ b/reactos/boot/bootdata/hivesys.inf @@ -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 diff --git a/reactos/boot/freeldr/freeldr/windows/headless.c b/reactos/boot/freeldr/freeldr/windows/headless.c index 8f3a7a40f97..40db235c7ca 100644 --- a/reactos/boot/freeldr/freeldr/windows/headless.c +++ b/reactos/boot/freeldr/freeldr/windows/headless.c @@ -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 { diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/reactos/boot/freeldr/freeldr/windows/winldr.c index fec79d983a7..6163933901f 100644 --- a/reactos/boot/freeldr/freeldr/windows/winldr.c +++ b/reactos/boot/freeldr/freeldr/windows/winldr.c @@ -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, "\\"); From 1f8570be622dcd758fb8287a488c27e0cc94e2a9 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Tue, 13 Aug 2013 03:14:22 +0000 Subject: [PATCH 26/68] [NTOSKRNL]: RtlGetVersion in the kernel does not fail, does not return a CSD version, and should not be returning negative build numbers. Fix it so that it works as it should (and anyone that relied on correct build numbers will no longer fail). svn path=/trunk/; revision=59717 --- reactos/ntoskrnl/rtl/misc.c | 60 +++++++++++++------------------------ 1 file changed, 21 insertions(+), 39 deletions(-) diff --git a/reactos/ntoskrnl/rtl/misc.c b/reactos/ntoskrnl/rtl/misc.c index d7c09b1b9b7..1b885498aa0 100644 --- a/reactos/ntoskrnl/rtl/misc.c +++ b/reactos/ntoskrnl/rtl/misc.c @@ -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)) + /* Return the basics */ + lpVersionInformation->dwMajorVersion = NtMajorVersion; + lpVersionInformation->dwMinorVersion = NtMinorVersion; + lpVersionInformation->dwBuildNumber = NtBuildNumber & 0x3FFF; + lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT; + + /* Check if this is the extended version */ + if (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'; - } - } - - 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; + 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 */ From 7e5cd9626784cc85f56d9fa9de72cb145b5b578e Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Tue, 13 Aug 2013 03:18:03 +0000 Subject: [PATCH 27/68] [NTOSKRNL]: Add and fix more glue code for EMS/Headless support. The SAC driver is at least correctly able to initialize now when /redirect is enabled. [SACMSG]: SAC wants the message tables as Unicode, but the CMakeList has an obscure comment that Unicode MC needs "testing". Well, I'll be the first to test it and confirm it works -- implement a UNICODE_SOURCE_REALLY to get Unicode-mc. [SACMSG]: Add a few more constants. [SACDRV]: Implement InitializeMachineInformation. [SACDRV]: Fix countless bugs. Now the entire driver initializes up to UTF8EncodeAndSend, which is unimplemented. We're almost there! svn path=/trunk/; revision=59718 --- reactos/drivers/sac/driver/data.c | 4 +- reactos/drivers/sac/driver/memory.c | 17 +- reactos/drivers/sac/driver/sacdrv.h | 1 + reactos/drivers/sac/driver/util.c | 614 ++++++++++++++++------ reactos/include/reactos/mc/CMakeLists.txt | 5 +- reactos/include/reactos/mc/sacmsg.mc | 12 +- reactos/ntoskrnl/ex/hdlsterm.c | 439 ++++++++++------ reactos/ntoskrnl/include/internal/hdl.h | 16 +- 8 files changed, 777 insertions(+), 331 deletions(-) diff --git a/reactos/drivers/sac/driver/data.c b/reactos/drivers/sac/driver/data.c index eee9ce0c7a7..14e4b7480af 100644 --- a/reactos/drivers/sac/driver/data.c +++ b/reactos/drivers/sac/driver/data.c @@ -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; } @@ -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"); diff --git a/reactos/drivers/sac/driver/memory.c b/reactos/drivers/sac/driver/memory.c index 6dfe2f1625e..4182a5c3069 100644 --- a/reactos/drivers/sac/driver/memory.c +++ b/reactos/drivers/sac/driver/memory.c @@ -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"); } diff --git a/reactos/drivers/sac/driver/sacdrv.h b/reactos/drivers/sac/driver/sacdrv.h index fef618c989a..f9e4daa7968 100644 --- a/reactos/drivers/sac/driver/sacdrv.h +++ b/reactos/drivers/sac/driver/sacdrv.h @@ -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) \ { \ diff --git a/reactos/drivers/sac/driver/util.c b/reactos/drivers/sac/driver/util.c index 32daaac3bc3..ca0c65b26b1 100644 --- a/reactos/drivers/sac/driver/util.c +++ b/reactos/drivers/sac/driver/util.c @@ -13,7 +13,7 @@ /* GLOBALS *******************************************************************/ PCHAR Utf8ConversionBuffer; -ULONG Utf8ConversionBufferSize; +ULONG Utf8ConversionBufferSize = PAGE_SIZE; PSAC_MACHINE_INFO MachineInformation; PVOID RequestSacCmdEventObjectBody; PKEVENT RequestSacCmdEventWaitObjectBody; @@ -122,7 +122,7 @@ NTSTATUS NTAPI PreloadGlobalMessageTable(IN PVOID ImageBase) { - NTSTATUS Status; + NTSTATUS Status, Status2; ULONG MessageId, TotalLength, TextSize, i; PWCHAR StringBuffer; PMESSAGE_RESOURCE_ENTRY MessageEntry; @@ -130,6 +130,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 +138,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 +183,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 +203,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 +230,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"\r\n"); - - if (MachineInformation->MachineName) - { - Size += wcslen(MachineInformation->MachineName); - Size += wcslen(L"%s\r\n"); - } - - if (MachineInformation->MachineGuid) - { - Size += wcslen(MachineInformation->MachineGuid); - Size += wcslen(L"%s\r\n"); - } - - if (MachineInformation->ProcessorArchitecture) - { - Size += wcslen(MachineInformation->ProcessorArchitecture); - Size += wcslen(L"%s\r\n"); - } - - if (MachineInformation->MajorVersion) - { - Size += wcslen(MachineInformation->MajorVersion); - Size += wcslen(L"%s\r\n"); - } - - if (MachineInformation->BuildNumber) - { - Size += wcslen(MachineInformation->BuildNumber); - Size += wcslen(L"%s\r\n"); - } - - if (MachineInformation->ProductType) - { - Size += wcslen(MachineInformation->ProductType); - Size += wcslen(L"%s\r\n"); - } - - if (MachineInformation->ServicePack) - { - Size += wcslen(MachineInformation->ServicePack); - Size += wcslen(L"%s\r\n"); - } - - if (ExtraData) Size += wcslen(ExtraData); - - Size += wcslen(L"\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"\r\n"); - wcscpy(p, L"\r\n"); - - p += Size; - - if (MachineInformation->MachineName) - { - p += swprintf(p, L"%s\r\n", MachineInformation->MachineName); - } - - if (MachineInformation->MachineGuid) - { - p += swprintf(p, L"%s\r\n", MachineInformation->MachineGuid); - } - - if (MachineInformation->ProcessorArchitecture) - { - p += swprintf(p, L"%s\r\n", MachineInformation->ProcessorArchitecture); - } - - if (MachineInformation->MajorVersion) - { - p += swprintf(p, L"%s\r\n", MachineInformation->MajorVersion); - } - - if (MachineInformation->BuildNumber) - { - p += swprintf(p, L"%s\r\n", MachineInformation->BuildNumber); - } - - if (MachineInformation->ProductType) - { - p += swprintf(p, L"%s\r\n", MachineInformation->ProductType); - } - - if (MachineInformation->ServicePack) - { - p += swprintf(p, L"%s\r\n", MachineInformation->ServicePack); - } - - if (ExtraData) - { - Size = wcslen(ExtraData); - wcscpy(p, ExtraData); - p += Size; - } - - wcscpy(p, L"\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 +351,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 +376,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"\r\n"); + + /* Do we have a machine name? */ + if (MachineInformation->MachineName) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->MachineName); + Size += wcslen(L"%s\r\n"); + } + + /* Do we have a GUID? */ + if (MachineInformation->MachineGuid) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->MachineGuid); + Size += wcslen(L"%s\r\n"); + } + + /* Do we know the processor? */ + if (MachineInformation->ProcessorArchitecture) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->ProcessorArchitecture); + Size += wcslen(L"%s\r\n"); + } + + /* Do we have the version? */ + if (MachineInformation->MajorVersion) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->MajorVersion); + Size += wcslen(L"%s\r\n"); + } + + /* Do we have the build? */ + if (MachineInformation->BuildNumber) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->BuildNumber); + Size += wcslen(L"%s\r\n"); + } + + /* Do we have the product type? */ + if (MachineInformation->ProductType) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->ProductType); + Size += wcslen(L"%s\r\n"); + } + + /* Do we have a service pack? */ + if (MachineInformation->ServicePack) + { + /* Go and add it in */ + Size += wcslen(MachineInformation->ServicePack); + Size += wcslen(L"%s\r\n"); + } + + /* Anything else we need to know? Add it in too */ + if (ExtraData) Size += wcslen(ExtraData); + + /* Finally, add the footer */ + Size += wcslen(L"\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"\r\n"); + p += wcslen(L"\r\n");; + + if (MachineInformation->MachineName) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->MachineName); + } + + if (MachineInformation->MachineGuid) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->MachineGuid); + } + + if (MachineInformation->ProcessorArchitecture) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->ProcessorArchitecture); + } + + if (MachineInformation->MajorVersion) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->MajorVersion); + } + + if (MachineInformation->BuildNumber) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->BuildNumber); + } + + if (MachineInformation->ProductType) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->ProductType); + } + + if (MachineInformation->ServicePack) + { + p += swprintf(p, + L"%s\r\n", + MachineInformation->ServicePack); + } + + if (ExtraData) + { + wcscpy(p, ExtraData); + p += wcslen(ExtraData); + } + + wcscpy(p, L"\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 +861,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 +944,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 +965,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, diff --git a/reactos/include/reactos/mc/CMakeLists.txt b/reactos/include/reactos/mc/CMakeLists.txt index 8037a7c2575..a1d652e6401 100644 --- a/reactos/include/reactos/mc/CMakeLists.txt +++ b/reactos/include/reactos/mc/CMakeLists.txt @@ -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}) diff --git a/reactos/include/reactos/mc/sacmsg.mc b/reactos/include/reactos/mc/sacmsg.mc index 4d3052c3d42..4802bc0ccf1 100644 --- a/reactos/include/reactos/mc/sacmsg.mc +++ b/reactos/include/reactos/mc/sacmsg.mc @@ -461,7 +461,7 @@ Language=English . MessageId=98 -SymbolicName=SACDRV_98 +SymbolicName=SAC_NO_DATA_MSG Language=English None%0 . @@ -473,25 +473,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 . @@ -695,7 +695,7 @@ The specified gateway IP address is invalid. . MessageId=153 -SymbolicName=SACDRV_153 +SymbolicName=SAC_UNINITIALIZED_MSG Language=English not yet initialized%0 . diff --git a/reactos/ntoskrnl/ex/hdlsterm.c b/reactos/ntoskrnl/ex/hdlsterm.c index f91b32cc78a..6f2b5af584f 100644 --- a/reactos/ntoskrnl/ex/hdlsterm.c +++ b/reactos/ntoskrnl/ex/hdlsterm.c @@ -17,111 +17,156 @@ 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; + /* 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"); + /* 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 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; + PHEADLESS_LOADER_BLOCK HeadlessBlock; - HeadlessBlock = LoaderBlock->Extension->HeadlessLoaderBlock; - if (!HeadlessBlock) return; - if ((HeadlessBlock->PortNumber > 4) && (HeadlessBlock->UsedBiosSettings)) return; + /* Only initialize further if the loader found EMS enabled */ + HeadlessBlock = LoaderBlock->Extension->HeadlessLoaderBlock; + if (!HeadlessBlock) return; - HeadlessGlobals = ExAllocatePoolWithTag( - NonPagedPool, - sizeof(HEADLESS_GLOBALS), - 'sldH'); - if (!HeadlessGlobals) return; + /* Ignore invalid EMS settings */ + if ((HeadlessBlock->PortNumber > 4) && (HeadlessBlock->UsedBiosSettings)) 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; + /* Allocate the global headless data */ + HeadlessGlobals = ExAllocatePoolWithTag(NonPagedPool, + sizeof(*HeadlessGlobals), + 'sldH'); + if (!HeadlessGlobals) return; - /* These two are opposites of each other */ - if (HeadlessGlobals->IsMMIODevice) HeadlessGlobals->IsNonLegacyDevice = TRUE; + /* 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); - /* Check for a PCI device, warn that this isn't supported */ - if (HeadlessBlock->PciDeviceId != PCI_INVALID_VENDORID) - { - DPRINT1("PCI Serial Ports not supported\n"); - } + /* These two are opposites of each other */ + if (HeadlessGlobals->IsMMIODevice) HeadlessGlobals->IsNonLegacyDevice = TRUE; - /* Log entries are not yet supported */ - DPRINT1("FIXME: No Headless logging support\n"); + /* Check for a PCI device, warn that this isn't supported */ + if (HeadlessBlock->PciDeviceId != PCI_INVALID_VENDORID) + { + DPRINT1("PCI Serial Ports not supported\n"); + } - /* Allocate temporary buffer */ - HeadlessGlobals->TmpBuffer = ExAllocatePoolWithTag(NonPagedPool, 80, 'sldH'); - if (!HeadlessGlobals->TmpBuffer) return; + /* Log entries are not yet supported */ + DPRINT1("FIXME: No Headless logging support\n"); - /* 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"); - } + /* Allocate temporary buffer */ + HeadlessGlobals->TmpBuffer = ExAllocatePoolWithTag(NonPagedPool, 80, 'sldH'); + if (!HeadlessGlobals->TmpBuffer) return; - /* Enable the terminal */ - HdlspEnableTerminal(TRUE); + /* 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); } VOID @@ -197,59 +242,80 @@ 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; + 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)) + { + OldIrql = HdlspAcquireGlobalLock(); - /* Ignore non-reentrant commands */ - if ((Command != HeadlessCmdAddLogEntry) && - (Command != HeadlessCmdStartBugCheck) && - (Command != HeadlessCmdSendBlueScreenData) && - (Command != HeadlessCmdDoBugCheckProcessing)) - { - if (HeadlessGlobals->ProcessingCmd) return STATUS_UNSUCCESSFUL; + if (HeadlessGlobals->ProcessingCmd) + { + HdlspReleaselobalLock(OldIrql); + return STATUS_UNSUCCESSFUL; + } - /* Don't allow these commands next time */ - HeadlessGlobals->ProcessingCmd = TRUE; - } + /* 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; - } + /* 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 */ - PHEADLESS_CMD_PUT_STRING PutString = (PVOID)InputBuffer; + PutString = InputBuffer; HdlspPutString(PutString->String); } /* Return success either way */ - //Status = STATUS_SUCCESS; + Status = STATUS_SUCCESS; break; case HeadlessCmdClearDisplay: break; @@ -276,13 +342,62 @@ 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: @@ -293,60 +408,60 @@ HdlspDispatch( break; } -Reset: - /* Unset prcessing state */ - if ((Command != HeadlessCmdAddLogEntry) && - (Command != HeadlessCmdStartBugCheck) && - (Command != HeadlessCmdSendBlueScreenData) && - (Command != HeadlessCmdDoBugCheckProcessing)) - { - ASSERT(HeadlessGlobals->ProcessingCmd == TRUE); - HeadlessGlobals->ProcessingCmd = FALSE; - } + /* Unset processing state */ + if ((Command != HeadlessCmdAddLogEntry) && + (Command != HeadlessCmdStartBugCheck) && + (Command != HeadlessCmdSendBlueScreenData) && + (Command != HeadlessCmdDoBugCheckProcessing)) + { + ASSERT(HeadlessGlobals->ProcessingCmd == TRUE); + HeadlessGlobals->ProcessingCmd = FALSE; + } - //UNIMPLEMENTED; - return STATUS_SUCCESS; + /* 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; + /* 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); -} + /* 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 */ diff --git a/reactos/ntoskrnl/include/internal/hdl.h b/reactos/ntoskrnl/include/internal/hdl.h index 349a9070f7b..073f1b9cb7f 100644 --- a/reactos/ntoskrnl/include/internal/hdl.h +++ b/reactos/ntoskrnl/include/internal/hdl.h @@ -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,6 +182,11 @@ 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]; From 81462f65ed7f1d851c7fa596a393ea7a4027efc0 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Tue, 13 Aug 2013 15:12:04 +0000 Subject: [PATCH 28/68] [PSDK] * Annotate shlwapi.h. svn path=/trunk/; revision=59722 --- reactos/include/psdk/shlwapi.h | 1523 +++++++++++++++++++++++++------- 1 file changed, 1213 insertions(+), 310 deletions(-) diff --git a/reactos/include/psdk/shlwapi.h b/reactos/include/psdk/shlwapi.h index db20e96b525..485e7634ad9 100644 --- a/reactos/include/psdk/shlwapi.h +++ b/reactos/include/psdk/shlwapi.h @@ -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,30 +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 */ -void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk); -void WINAPI IUnknown_AtomicRelease(IUnknown **punk); -HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd); -HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite); -HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv); -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 @@ -336,230 +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,LPSTR,LPDWORD,DWORD); -HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +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) -HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD); +HRESULT WINAPI PathCreateFromUrlAlloc(_In_ LPCWSTR, _Outptr_ LPWSTR*, DWORD); -BOOL WINAPI PathFileExistsA(LPCSTR); -BOOL WINAPI PathFileExistsW(LPCWSTR); +BOOL WINAPI PathFileExistsA(_In_ LPCSTR); +BOOL WINAPI PathFileExistsW(_In_ LPCWSTR); #define PathFileExists WINELIB_NAME_AW(PathFileExists) 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 */ @@ -650,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, \ @@ -676,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(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, \ @@ -716,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 { @@ -738,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 */ @@ -756,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 @@ -832,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) @@ -850,71 +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) -LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT); -LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT); +LPWSTR WINAPI StrStrNW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); +LPWSTR WINAPI StrStrNIW(_In_ LPCWSTR, _In_ LPCWSTR, UINT); -int WINAPI StrToIntA(LPCSTR); -int WINAPI StrToIntW(LPCWSTR); +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) @@ -925,15 +1729,46 @@ 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); @@ -945,13 +1780,13 @@ BOOL WINAPI IsCharSpaceW(WCHAR); /* 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 */ @@ -961,19 +1796,67 @@ 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**); @@ -993,12 +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 SHCreateThreadRef(LONG*, IUnknown**); -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 */ @@ -1010,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 */ @@ -1048,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) @@ -1065,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) */ @@ -1133,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 From 209b52209309331a5bc1105ece6815f2a06cac79 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Tue, 13 Aug 2013 15:27:13 +0000 Subject: [PATCH 29/68] [KERNEL32] * Include winspool.h only where it's needed. svn path=/trunk/; revision=59723 --- reactos/dll/win32/kernel32/client/job.c | 1 + reactos/dll/win32/kernel32/k32.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/kernel32/client/job.c b/reactos/dll/win32/kernel32/client/job.c index cdefe6149cb..6701ea65d56 100644 --- a/reactos/dll/win32/kernel32/client/job.c +++ b/reactos/dll/win32/kernel32/client/job.c @@ -11,6 +11,7 @@ /* INCLUDES *******************************************************************/ #include +#include #define NDEBUG #include diff --git a/reactos/dll/win32/kernel32/k32.h b/reactos/dll/win32/kernel32/k32.h index 460b0007e09..fe122ae7393 100644 --- a/reactos/dll/win32/kernel32/k32.h +++ b/reactos/dll/win32/kernel32/k32.h @@ -20,7 +20,6 @@ #include #include #include -#include #include /* Redefine NTDDI_VERSION to 2K3 SP1 to get correct NDK definitions */ From f33e61c6a544dfb8e875802973c897ec6df4bfe8 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Tue, 13 Aug 2013 18:09:50 +0000 Subject: [PATCH 30/68] [PSDK] * Annotate commctrl.h. svn path=/trunk/; revision=59726 --- reactos/include/psdk/commctrl.h | 468 +++++++++++++++++++++++++++----- 1 file changed, 403 insertions(+), 65 deletions(-) diff --git a/reactos/include/psdk/commctrl.h b/reactos/include/psdk/commctrl.h index 7ac0ef1895a..840c15a7fa6 100644 --- a/reactos/include/psdk/commctrl.h +++ b/reactos/include/psdk/commctrl.h @@ -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 @@ -4748,5 +5085,6 @@ HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL * #ifdef __cplusplus } #endif + #endif #endif From 83b94585d4722f83e2460c91d1415dd73a0ef3b4 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Tue, 13 Aug 2013 18:23:10 +0000 Subject: [PATCH 31/68] [PSDK] * Update oleauto.h. svn path=/trunk/; revision=59727 --- reactos/include/psdk/oleauto.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reactos/include/psdk/oleauto.h b/reactos/include/psdk/oleauto.h index 98e8dbf57ad..f9862e73274 100644 --- a/reactos/include/psdk/oleauto.h +++ b/reactos/include/psdk/oleauto.h @@ -750,6 +750,8 @@ 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); +HRESULT WINAPI RegisterTypeLibForUser(ITypeLib*,OLECHAR*,OLECHAR*); +HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND); VOID WINAPI ClearCustData(LPCUSTDATA); From cf0c04f897ba338cbd34632e408e7fbcc70da6bc Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Tue, 13 Aug 2013 21:21:08 +0000 Subject: [PATCH 32/68] [SAL] * Add _Ret_writes_maybenull_z_ annotation. svn path=/trunk/; revision=59731 --- reactos/include/psdk/sal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/sal.h b/reactos/include/psdk/sal.h index 06ef54c0036..069cd3a98a6 100644 --- a/reactos/include/psdk/sal.h +++ b/reactos/include/psdk/sal.h @@ -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) From 7347dd9801df3cac4c8365b6bebf3f1c7abcf782 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Wed, 14 Aug 2013 04:20:17 +0000 Subject: [PATCH 33/68] [SACDRV]: fix a bug in ChannelReferenceToOneByIndexwithLock and ChanMgrCreateChannel. [SACDRV]: implement SacTranslateUnicodeToUtf8. [NTOSKRNL]: implement HadlessCmdPutData. EMS bringup is now functional: " Computer is booting, SAC started and initialized.\n\nUse the \"ch -?\" command for information about using channels.\nUse the \"?\" command for general help. SAC>%0 " svn path=/trunk/; revision=59732 --- reactos/drivers/sac/driver/chanmgr.c | 8 ++-- reactos/drivers/sac/driver/util.c | 39 ++++++++++++++++- reactos/ntoskrnl/ex/hdlsterm.c | 64 ++++++++++++++++++++-------- 3 files changed, 88 insertions(+), 23 deletions(-) diff --git a/reactos/drivers/sac/driver/chanmgr.c b/reactos/drivers/sac/driver/chanmgr.c index a005a1e98c8..8e726f6dfb0 100644 --- a/reactos/drivers/sac/driver/chanmgr.c +++ b/reactos/drivers/sac/driver/chanmgr.c @@ -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,7 @@ ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel, if (i == SAC_MAX_CHANNELS) { /* Bail out */ - Status = STATUS_UNSUCCESSFUL; + SAC_DBG(SAC_DBG_INIT, "failing here: %d %lx\n", __LINE__, Status); goto ReturnStatus; } @@ -439,6 +438,7 @@ ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel, else { /* We couldn't create it, free the buffer */ + SAC_DBG(SAC_DBG_INIT, "failing here: %d %lx\n", __LINE__, Status); SacFreePool(NewChannel); } diff --git a/reactos/drivers/sac/driver/util.c b/reactos/drivers/sac/driver/util.c index ca0c65b26b1..c32f764856c 100644 --- a/reactos/drivers/sac/driver/util.c +++ b/reactos/drivers/sac/driver/util.c @@ -41,8 +41,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 diff --git a/reactos/ntoskrnl/ex/hdlsterm.c b/reactos/ntoskrnl/ex/hdlsterm.c index 6f2b5af584f..20c71343c58 100644 --- a/reactos/ntoskrnl/ex/hdlsterm.c +++ b/reactos/ntoskrnl/ex/hdlsterm.c @@ -171,9 +171,19 @@ HeadlessInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock) VOID NTAPI -HdlspPutString( - IN PUCHAR String - ) +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) { PUCHAR Dest = HeadlessGlobals->TmpBuffer; UCHAR Char = 0; @@ -306,17 +316,18 @@ HdlspDispatch(IN HEADLESS_CMD Command, 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); - } + /* 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; - /* Return success either way */ - Status = STATUS_SUCCESS; - break; case HeadlessCmdClearDisplay: break; case HeadlessCmdClearToEndOfDisplay: @@ -403,10 +414,29 @@ HdlspDispatch(IN HEADLESS_CMD Command, case HeadlessCmdQueryGUID: break; case HeadlessCmdPutData: - break; - default: - break; - } + + /* 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) && From 0fd6b4331310d7ccea7e0c650355a7b85356a9ff Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 14 Aug 2013 11:02:08 +0000 Subject: [PATCH 34/68] [WIN32K] - Do not use a internal section object structure type, it's just not necessary and win32k should not ever need to access its fields directly. svn path=/trunk/; revision=59733 --- reactos/win32ss/gdi/ntgdi/freetype.c | 4 ++-- reactos/win32ss/user/ntuser/desktop.h | 2 +- reactos/win32ss/user/ntuser/main.c | 4 ++-- reactos/win32ss/user/ntuser/ntuser.h | 2 +- reactos/win32ss/user/ntuser/usrheap.c | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/reactos/win32ss/gdi/ntgdi/freetype.c b/reactos/win32ss/gdi/ntgdi/freetype.c index 9b0405032e6..ef557030035 100644 --- a/reactos/win32ss/gdi/ntgdi/freetype.c +++ b/reactos/win32ss/gdi/ntgdi/freetype.c @@ -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)) diff --git a/reactos/win32ss/user/ntuser/desktop.h b/reactos/win32ss/user/ntuser/desktop.h index 672303eee05..25e1f9e331c 100644 --- a/reactos/win32ss/user/ntuser/desktop.h +++ b/reactos/win32ss/user/ntuser/desktop.h @@ -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; diff --git a/reactos/win32ss/user/ntuser/main.c b/reactos/win32ss/user/ntuser/main.c index 7ded7d16b10..b3e1539f78a 100644 --- a/reactos/win32ss/user/ntuser/main.c +++ b/reactos/win32ss/user/ntuser/main.c @@ -15,12 +15,12 @@ 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. diff --git a/reactos/win32ss/user/ntuser/ntuser.h b/reactos/win32ss/user/ntuser/ntuser.h index 2206f30daba..a35079b2b18 100644 --- a/reactos/win32ss/user/ntuser/ntuser.h +++ b/reactos/win32ss/user/ntuser/ntuser.h @@ -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); diff --git a/reactos/win32ss/user/ntuser/usrheap.c b/reactos/win32ss/user/ntuser/usrheap.c index be5c0d94adf..482484ad908 100644 --- a/reactos/win32ss/user/ntuser/usrheap.c +++ b/reactos/win32ss/user/ntuser/usrheap.c @@ -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) { From 8b235bf105ded8e9da6ac3839cc9a67e9593bd6b Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 Aug 2013 13:23:37 +0000 Subject: [PATCH 35/68] [PSDK] * Annotate cfgmgr32.h. svn path=/trunk/; revision=59735 --- reactos/include/psdk/cfgmgr32.h | 1751 ++++++++++++++++--------------- 1 file changed, 877 insertions(+), 874 deletions(-) diff --git a/reactos/include/psdk/cfgmgr32.h b/reactos/include/psdk/cfgmgr32.h index 41c401f5196..e311f9625e0 100644 --- a/reactos/include/psdk/cfgmgr32.h +++ b/reactos/include/psdk/cfgmgr32.h @@ -22,6 +22,7 @@ #pragma once +#ifndef _CFGMGR32_H_ #define _CFGMGR32_H_ #include @@ -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_ */ From adde38d4dd402f0eb1489d8046fbe6cdabecff0b Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 14 Aug 2013 14:08:40 +0000 Subject: [PATCH 36/68] [RTL] - Improve debug messages to include failure status. svn path=/trunk/; revision=59736 --- reactos/lib/rtl/process.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/lib/rtl/process.c b/reactos/lib/rtl/process.c index 0dd60374d96..e74cb8eab65 100644 --- a/reactos/lib/rtl/process.c +++ b/reactos/lib/rtl/process.c @@ -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); From 4ed7e8a0522fff25b1c8f1cff2d447c1de7433a5 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 14 Aug 2013 16:17:16 +0000 Subject: [PATCH 37/68] [PSDK] * Annotate ws2spi.h. svn path=/trunk/; revision=59737 --- reactos/include/psdk/ws2spi.h | 1000 +++++++++++++++++---------------- 1 file changed, 508 insertions(+), 492 deletions(-) diff --git a/reactos/include/psdk/ws2spi.h b/reactos/include/psdk/ws2spi.h index 3126c22b385..6fb353dde45 100644 --- a/reactos/include/psdk/ws2spi.h +++ b/reactos/include/psdk/ws2spi.h @@ -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 From cf07d174239658a51fa29558f9ba31ef4f7386aa Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 15 Aug 2013 11:41:53 +0000 Subject: [PATCH 38/68] [SAL] * Add _Ret_opt_ and _Ret_opt_valid_ annotations. svn path=/trunk/; revision=59742 --- reactos/include/psdk/sal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/psdk/sal.h b/reactos/include/psdk/sal.h index 069cd3a98a6..c656f44c7ac 100644 --- a/reactos/include/psdk/sal.h +++ b/reactos/include/psdk/sal.h @@ -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) From 7f9ea4491b754e81d474e19caa1caf0afc4b214b Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 15 Aug 2013 12:59:02 +0000 Subject: [PATCH 39/68] [PSDK] * Annotate ws2tcpip.h. svn path=/trunk/; revision=59743 --- reactos/include/psdk/ws2tcpip.h | 460 ++++++++++++++++---------------- 1 file changed, 231 insertions(+), 229 deletions(-) diff --git a/reactos/include/psdk/ws2tcpip.h b/reactos/include/psdk/ws2tcpip.h index b4c8a049d89..8d8aaa75add 100644 --- a/reactos/include/psdk/ws2tcpip.h +++ b/reactos/include/psdk/ws2tcpip.h @@ -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 From e0532e413c7d4016e81e93e22daa866f66ba0a34 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 15 Aug 2013 13:57:16 +0000 Subject: [PATCH 40/68] [SAL] * Add _Inout_updates_to_() annotation. svn path=/trunk/; revision=59744 --- reactos/include/psdk/sal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/sal.h b/reactos/include/psdk/sal.h index c656f44c7ac..c326d248ab1 100644 --- a/reactos/include/psdk/sal.h +++ b/reactos/include/psdk/sal.h @@ -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_) From dabb39b31c5eda2aca769e6b2003b81c21eca002 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 15 Aug 2013 14:32:37 +0000 Subject: [PATCH 41/68] [PSDK] * Annotate winsock.h. svn path=/trunk/; revision=59745 --- reactos/include/psdk/winsock.h | 298 ++++++++++++++++----------------- 1 file changed, 149 insertions(+), 149 deletions(-) diff --git a/reactos/include/psdk/winsock.h b/reactos/include/psdk/winsock.h index 75283ec215b..9c1e6121cb5 100644 --- a/reactos/include/psdk/winsock.h +++ b/reactos/include/psdk/winsock.h @@ -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) From b0dc82eda63900406c01117eb8ac64b6130e8eab Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 15 Aug 2013 21:11:40 +0000 Subject: [PATCH 42/68] [SAL] * Add _Post_null_ annotation. svn path=/trunk/; revision=59747 --- reactos/include/psdk/sal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/sal.h b/reactos/include/psdk/sal.h index c326d248ab1..c4479d49956 100644 --- a/reactos/include/psdk/sal.h +++ b/reactos/include/psdk/sal.h @@ -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)]) From fcac9556d6e7fcf4dd9e9c5f1a32b7eee831b1a6 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 15 Aug 2013 21:43:06 +0000 Subject: [PATCH 43/68] [PSDK] * Annotate shellapi.h. svn path=/trunk/; revision=59748 --- reactos/include/psdk/shellapi.h | 257 +++++++++++++++++++++++++++----- 1 file changed, 216 insertions(+), 41 deletions(-) diff --git a/reactos/include/psdk/shellapi.h b/reactos/include/psdk/shellapi.h index a25109ead9f..b4c2c13d73e 100644 --- a/reactos/include/psdk/shellapi.h +++ b/reactos/include/psdk/shellapi.h @@ -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(_In_ LPCWSTR, _Out_ int*); +void WINAPI DragAcceptFiles(_In_ HWND, _In_ BOOL); +void WINAPI DragFinish(_In_ HDROP); -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); +_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 From 8da248e5cbd1097e322eb18a74a55a699683c7c6 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 16 Aug 2013 13:22:42 +0000 Subject: [PATCH 44/68] [CRT] * Annotate conio_s.h. svn path=/trunk/; revision=59749 --- reactos/include/crt/sec_api/conio_s.h | 139 ++++++++++++++++++++++---- 1 file changed, 122 insertions(+), 17 deletions(-) diff --git a/reactos/include/crt/sec_api/conio_s.h b/reactos/include/crt/sec_api/conio_s.h index 98d97ba2e0e..7a77367688e 100644 --- a/reactos/include/crt/sec_api/conio_s.h +++ b/reactos/include/crt/sec_api/conio_s.h @@ -15,28 +15,133 @@ 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 */ From ba6322db09f7e6f45d8089465cbd52d740b10289 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 16 Aug 2013 14:51:13 +0000 Subject: [PATCH 45/68] [CRT] * Annotate string_s.h. svn path=/trunk/; revision=59750 --- reactos/include/crt/sec_api/string_s.h | 320 ++++++++++++++++++++++--- 1 file changed, 287 insertions(+), 33 deletions(-) diff --git a/reactos/include/crt/sec_api/string_s.h b/reactos/include/crt/sec_api/string_s.h index 24d60320bb7..0516c0be498 100644 --- a/reactos/include/crt/sec_api/string_s.h +++ b/reactos/include/crt/sec_api/string_s.h @@ -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 @@ -14,46 +15,299 @@ 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); + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strset_s( + _Inout_updates_z_(_DstSize) char *_Dst, + _In_ size_t _DstSize, + _In_ int _Value); - _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 + _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); + _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); -#endif + _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 */ From 3dff5bef29e2f23d02c5fb9833732dca8e4b0eae Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 16 Aug 2013 21:13:36 +0000 Subject: [PATCH 46/68] [CRT] * Annotate mbstring_s.h. * Update _mbsnbcpy_s() annotation in mbstring.h. svn path=/trunk/; revision=59755 --- reactos/include/crt/mbstring.h | 11 +- reactos/include/crt/sec_api/mbstring_s.h | 268 ++++++++++++++++++++--- 2 files changed, 245 insertions(+), 34 deletions(-) diff --git a/reactos/include/crt/mbstring.h b/reactos/include/crt/mbstring.h index 87ec6e397f0..b897196a4b6 100644 --- a/reactos/include/crt/mbstring.h +++ b/reactos/include/crt/mbstring.h @@ -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* diff --git a/reactos/include/crt/sec_api/mbstring_s.h b/reactos/include/crt/sec_api/mbstring_s.h index 6b2b188f8b7..35e0efdae02 100644 --- a/reactos/include/crt/sec_api/mbstring_s.h +++ b/reactos/include/crt/sec_api/mbstring_s.h @@ -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 */ From 889edacdad297bc0f7bf5395fba05bd756fa5106 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 16 Aug 2013 22:05:23 +0000 Subject: [PATCH 47/68] [PSDK] * Annotate objbase.h. svn path=/trunk/; revision=59756 --- reactos/include/psdk/objbase.h | 724 ++++++++++++++++++++++++++++----- 1 file changed, 628 insertions(+), 96 deletions(-) diff --git a/reactos/include/psdk/objbase.h b/reactos/include/psdk/objbase.h index e9295de6cf3..1db973dc8a7 100644 --- a/reactos/include/psdk/objbase.h +++ b/reactos/include/psdk/objbase.h @@ -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); -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 +CoCreateInstance( + _In_ REFCLSID rclsid, + _In_opt_ LPUNKNOWN pUnkOuter, + _In_ DWORD dwClsContext, + _In_ REFIID iid, + _Outptr_ _At_(*ppv, _Post_readable_size_(_Inexpressible_(varies))) LPVOID *ppv); -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 +CoCreateInstanceEx( + _In_ REFCLSID rclsid, + _In_opt_ LPUNKNOWN pUnkOuter, + _In_ DWORD dwClsContext, + _In_opt_ COSERVERINFO *pServerInfo, + _In_ ULONG cmq, + _Inout_updates_(cmq) MULTI_QI *pResults); -HRESULT WINAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy); +_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); + +_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); + +_Check_return_ +HRESULT +WINAPI +CoGetMalloc( + _In_ DWORD dwMemContext, + _Outptr_ LPMALLOC *lpMalloc); + +_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); -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 +CoGetCallContext( + _In_ REFIID riid, + _Outptr_ void **ppInterface); + +_Check_return_ +HRESULT +WINAPI +CoSwitchCallContext( + _In_opt_ IUnknown *pContext, + _Outptr_ IUnknown **ppOldContext); + +_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); -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 +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); + +_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); +_Check_return_ +HRESULT +WINAPI +StringFromIID( + _In_ REFIID rclsid, + _Outptr_ LPOLESTR *lplpsz); -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 +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 } From 971f5c45589246c84ab89ec77ac6a05d9868ffca Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 Aug 2013 11:20:05 +0000 Subject: [PATCH 48/68] [PSDK] * Annotate dbghelp.h. svn path=/trunk/; revision=59758 --- reactos/include/psdk/dbghelp.h | 1430 +++++++++++++++++++++++++++----- 1 file changed, 1223 insertions(+), 207 deletions(-) diff --git a/reactos/include/psdk/dbghelp.h b/reactos/include/psdk/dbghelp.h index 483ef29ddd0..a6715f7bbee 100644 --- a/reactos/include/psdk/dbghelp.h +++ b/reactos/include/psdk/dbghelp.h @@ -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 @@ -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); +typedef BOOL +(CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)( + _In_ HANDLE, + _In_ DWORD64, + _Out_writes_bytes_(nSize) PVOID, + _In_ DWORD nSize, + _Out_ PDWORD); -PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64); +typedef PVOID +(CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)( + _In_ HANDLE, + _In_ DWORD64); -typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64); +typedef DWORD64 +(CALLBACK *PGET_MODULE_BASE_ROUTINE64)( + _In_ HANDLE, + _In_ DWORD64); -BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64); +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); +typedef BOOL +(CALLBACK *PENUMLOADED_MODULES_CALLBACK)( + _In_ PCSTR, + _In_ ULONG, + _In_ ULONG, + _In_opt_ PVOID); -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 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 From 4a8340e43a525c61fd6fb0b94b85e1da30575026 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 17 Aug 2013 13:18:02 +0000 Subject: [PATCH 49/68] [NETAPI32] - NetUserAdd: Open the accounts domain with DOMAIN_READ_PASSWORD_PARAMETERS access. This is needed in order to check whether the password matches the password requirements of the domain. - Start implementing NetUserGetGroups. svn path=/trunk/; revision=59759 --- reactos/dll/win32/netapi32/user.c | 151 +++++++++++++++++++++++++++++- 1 file changed, 148 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/netapi32/user.c b/reactos/dll/win32/netapi32/user.c index dcd313d515a..3840b68a4b8 100644 --- a/reactos/dll/win32/netapi32/user.c +++ b/reactos/dll/win32/netapi32/user.c @@ -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 } From d7a08744170f128f64719d6577e7593dbbe6069a Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 Aug 2013 15:39:59 +0000 Subject: [PATCH 50/68] [PSDK] * Annotate oleauto.h. svn path=/trunk/; revision=59761 --- reactos/include/psdk/oleauto.h | 1012 +++++++++++++++++++++----------- 1 file changed, 662 insertions(+), 350 deletions(-) diff --git a/reactos/include/psdk/oleauto.h b/reactos/include/psdk/oleauto.h index f9862e73274..0fb083338fc 100644 --- a/reactos/include/psdk/oleauto.h +++ b/reactos/include/psdk/oleauto.h @@ -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*); +SAFEARRAY* +WINAPI +SafeArrayCreate( + _In_ VARTYPE, + _In_ UINT, + _In_ SAFEARRAYBOUND*); -HRESULT WINAPI VectorFromBstr(BSTR,SAFEARRAY**); -HRESULT WINAPI BstrFromVector(SAFEARRAY*,BSTR*); +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 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,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 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 VarI2FromDec(_In_ DECIMAL*, _Out_ SHORT*); +HRESULT WINAPI VarI2FromDisp(IDispatch*, LCID, _Out_ 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 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,LONG64*); -HRESULT WINAPI VarI8FromI2(SHORT,LONG64*); +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 VarI8FromCy(_In_ CY, _Out_ LONG64*); +HRESULT WINAPI VarI8FromDisp(IDispatch*, _In_ LCID, _Out_ 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 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 VarR4FromDec(_In_ DECIMAL*, _Out_ FLOAT*); +HRESULT WINAPI VarR4FromDisp(IDispatch*, LCID, _Out_ 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 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 VarR8FromDec(_In_ const DECIMAL*, _Out_ double*); +HRESULT WINAPI VarR8FromDisp(IDispatch*, LCID, _Out_ 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 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,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 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,BSTR*); +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 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,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 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(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 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,USHORT*); -HRESULT WINAPI VarUI2FromI2(SHORT,USHORT*); -HRESULT WINAPI VarUI2FromI4(LONG,USHORT*); -HRESULT WINAPI VarUI2FromI8(LONG64,USHORT*); -HRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*); +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 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(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 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,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 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 VarUI8FromCy(CY, _Out_ ULONG64*); +HRESULT WINAPI VarUI8FromDisp(_In_ IDispatch*, LCID, _Out_ 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 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 VarR4CmpR8(_In_ float, _In_ double); -HRESULT WINAPI VarR8Pow(double,double,double*); -HRESULT WINAPI VarR8Round(double,int,double*); +HRESULT WINAPI VarR8Pow(_In_ double, _In_ double, _Out_ double*); +HRESULT WINAPI VarR8Round(_In_ double, _In_ int, _Out_ 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 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(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 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(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 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(LPVARIANT,LPVARIANT); -HRESULT WINAPI VarFix(LPVARIANT,LPVARIANT); -HRESULT WINAPI VarInt(LPVARIANT,LPVARIANT); -HRESULT WINAPI VarNeg(LPVARIANT,LPVARIANT); -HRESULT WINAPI VarNot(LPVARIANT,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(LPVARIANT,int,LPVARIANT); +HRESULT WINAPI VarRound(_In_ LPVARIANT, _In_ int, _Out_ LPVARIANT); -HRESULT WINAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG); +HRESULT WINAPI VarCmp(_In_ LPVARIANT, _In_ LPVARIANT, _In_ LCID, _In_ ULONG); -HRESULT WINAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG); -HRESULT WINAPI VarBstrCat(BSTR,BSTR,BSTR*); +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*); +_Check_return_ +HRESULT +WINAPI +VarParseNumFromStr( + _In_ OLECHAR*, + _In_ LCID, + _In_ ULONG, + _Out_ NUMPARSE*, + _Out_ BYTE*); -INT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*); -INT WINAPI VariantTimeToDosDateTime(double,USHORT*,USHORT*); +_Check_return_ +HRESULT +WINAPI +VarNumFromParseNum( + _In_ NUMPARSE*, + _In_ BYTE*, + _In_ ULONG, + _Out_ VARIANT*); -INT WINAPI VariantTimeToSystemTime(DOUBLE,LPSYSTEMTIME); -INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME,double*); +INT WINAPI DosDateTimeToVariantTime(_In_ USHORT, _In_ USHORT, _Out_ double*); +INT WINAPI VariantTimeToDosDateTime(_In_ double, _Out_ USHORT*, _Out_ USHORT*); -HRESULT WINAPI VarDateFromUdate(UDATE*,ULONG,DATE*); -HRESULT WINAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*); -HRESULT WINAPI VarUdateFromDate(DATE,ULONG,UDATE*); +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 VarWeekdayName(int, int, int, ULONG, _Out_ BSTR*); +HRESULT WINAPI VarMonthName(int, int, ULONG, _Out_ BSTR*); -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*); +_Check_return_ +HRESULT +WINAPI +GetAltMonthNames( + LCID, + _Outptr_result_buffer_maybenull_(13) LPOLESTR**); -HRESULT WINAPI VarFormatFromTokens(LPVARIANT,LPOLESTR,LPBYTE,ULONG,BSTR*,LCID); -HRESULT WINAPI VarTokenizeFormatString(LPOLESTR,LPBYTE,int,int,int,LCID,int*); +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,15 +1008,61 @@ 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); -HRESULT WINAPI RegisterTypeLibForUser(ITypeLib*,OLECHAR*,OLECHAR*); + +_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); From 226145ca8ecabe3418563ff3ef995fc8fcfa5b7a Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 Aug 2013 17:20:57 +0000 Subject: [PATCH 51/68] [PSDK] * Annotate wincon.h. svn path=/trunk/; revision=59762 --- reactos/include/psdk/wincon.h | 164 +++++++++++++++++++++++++++++----- 1 file changed, 143 insertions(+), 21 deletions(-) diff --git a/reactos/include/psdk/wincon.h b/reactos/include/psdk/wincon.h index 65528546555..78b8c05472b 100644 --- a/reactos/include/psdk/wincon.h +++ b/reactos/include/psdk/wincon.h @@ -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 */ From 7be422afdcb1c5c3ccd59a0985f45f4c13a4b4e8 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 Aug 2013 18:19:52 +0000 Subject: [PATCH 52/68] [PSDK] * Annotate oledlg.h. svn path=/trunk/; revision=59763 --- reactos/include/psdk/oledlg.h | 335 +++++++++++++++++++++++++--------- 1 file changed, 247 insertions(+), 88 deletions(-) diff --git a/reactos/include/psdk/oledlg.h b/reactos/include/psdk/oledlg.h index 29fff5ac0fe..38f8be324e0 100644 --- a/reactos/include/psdk/oledlg.h +++ b/reactos/include/psdk/oledlg.h @@ -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, ...); From c2a5e8a6104380f9fbc9cd6643aad49e48ebd327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 17 Aug 2013 20:07:39 +0000 Subject: [PATCH 53/68] [SERVICES] Clarify the fact that WaitForSingleObject returns WAIT_OBJECT_0 (which happens to be equal to ERROR_SUCCESS...) svn path=/trunk/; revision=59765 --- reactos/base/system/services/database.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c index 2440c6ab90f..a5c24d22929 100644 --- a/reactos/base/system/services/database.c +++ b/reactos/base/system/services/database.c @@ -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); From 52a99be7cb81b24cf693cebd1309fc52a9fbc802 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 Aug 2013 22:29:40 +0000 Subject: [PATCH 54/68] [PSDK] * Annotate ks.h. svn path=/trunk/; revision=59767 --- reactos/include/psdk/ks.h | 2433 +++++++++++++++++++++---------------- 1 file changed, 1379 insertions(+), 1054 deletions(-) diff --git a/reactos/include/psdk/ks.h b/reactos/include/psdk/ks.h index 7653fa3fac2..8949d61a282 100644 --- a/reactos/include/psdk/ks.h +++ b/reactos/include/psdk/ks.h @@ -1365,14 +1365,6 @@ typedef enum 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, @@ -1522,24 +1514,21 @@ typedef struct #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); + +_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 { @@ -1673,51 +1662,55 @@ typedef struct { #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; +_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 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; - -typedef -BOOLEAN +_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; @@ -1732,13 +1725,12 @@ typedef struct { 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 @@ -1983,16 +1975,16 @@ typedef struct #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 { @@ -2091,14 +2083,14 @@ typedef struct 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 @@ -2178,17 +2170,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,\ @@ -2240,18 +2229,17 @@ typedef struct { 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 { @@ -2263,11 +2251,10 @@ typedef struct 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 @@ -2309,86 +2296,74 @@ typedef struct { 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 - ); + _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); -typedef -void +_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 - ); + _In_ PKSPIN Pin, + _In_opt_ PKSDATAFORMAT OldFormat, + _In_opt_ PKSMULTIPLE_ITEM OldAttributeList, + _In_ const KSDATARANGE* DataRange, + _In_opt_ const KSATTRIBUTE_LIST* AttributeRange); -typedef -NTSTATUS +_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; @@ -2407,35 +2382,31 @@ typedef struct 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; @@ -2444,23 +2415,25 @@ struct _KSCLOCK_DISPATCH { 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; @@ -2469,66 +2442,62 @@ struct _KSALLOCATOR_DISPATCH { 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 - ); + _In_ PIRP Irp, + _In_ PKSP_PIN Pin, + _In_ PKSDATARANGE DataRange, + _Out_opt_ PVOID Data); -typedef -NTSTATUS +_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 - ); + _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 { @@ -2748,15 +2717,9 @@ 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[] = @@ -2784,16 +2747,15 @@ typedef struct 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,41 +2806,43 @@ 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); +_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 +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; @@ -2943,11 +2907,12 @@ struct _KSGATE { #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 +2920,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 +2933,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 +2965,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 +2998,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 +3118,12 @@ KsGateTerminateAnd( } } +_IRQL_requires_max_(HIGH_LEVEL) static void __inline KsGateTerminateOr( - IN PKSGATE OrGate) + _In_ PKSGATE OrGate) { ASSERT(OrGate); if (KsGateGetStateUnsafe(OrGate)) @@ -3189,7 +3169,9 @@ struct _KSSTREAM_POINTER_OFFSET ULONG Count; ULONG Remaining; }; + #if defined(_NTDDK_) + struct _KSSTREAM_POINTER { PVOID Context; @@ -3200,25 +3182,24 @@ struct _KSSTREAM_POINTER 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 /* =============================================================== @@ -3236,45 +3217,61 @@ 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); +_IRQL_requires_max_(PASSIVE_LEVEL) +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); +_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); -typedef NTSTATUS (NTAPI *PFNKSDEVICE)( - IN PKSDEVICE Device); +_IRQL_requires_max_(PASSIVE_LEVEL) +typedef NTSTATUS +(NTAPI *PFNKSDEVICE)( + _In_ PKSDEVICE Device); -typedef NTSTATUS (NTAPI *PFNKSDEVICEIRP)( - IN PKSDEVICE Device, - IN PIRP Irp); +_IRQL_requires_max_(PASSIVE_LEVEL) +typedef NTSTATUS +(NTAPI *PFNKSDEVICEIRP)( + _In_ PKSDEVICE Device, + _In_ PIRP Irp); -typedef VOID (NTAPI *PFNKSDEVICEIRPVOID)( - IN PKSDEVICE Device, - IN PIRP Irp); +_IRQL_requires_max_(PASSIVE_LEVEL) +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); +_IRQL_requires_max_(PASSIVE_LEVEL) +typedef NTSTATUS +(NTAPI *PFNKSDEVICEQUERYCAPABILITIES)( + _In_ PKSDEVICE Device, + _In_ PIRP Irp, + _Inout_ 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); +_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); -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 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; @@ -3323,23 +3320,27 @@ struct _KSFILTER PVOID Context; }; -typedef -void +_IRQL_requires_max_(PASSIVE_LEVEL) +typedef void (NTAPI *PFNKSFILTERPOWER)( - IN PKSFILTER Filter, - IN DEVICE_POWER_STATE State - ); + _In_ PKSFILTER Filter, + _In_ DEVICE_POWER_STATE State); -typedef NTSTATUS (NTAPI *PFNKSFILTERIRP)( - IN PKSFILTER Filter, - IN PIRP Irp); +_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); +typedef NTSTATUS +(NTAPI *PFNKSFILTERPROCESS)( + _In_ PKSFILTER Filter, + _In_ PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex); -typedef NTSTATUS (NTAPI *PFNKSFILTERVOID)( - IN PKSFILTER Filter); +_IRQL_requires_max_(PASSIVE_LEVEL) +typedef NTSTATUS +(NTAPI *PFNKSFILTERVOID)( + _In_ PKSFILTER Filter); struct _KSFILTER_DISPATCH { @@ -3359,35 +3360,33 @@ struct _KSNODE_DESCRIPTOR #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 { @@ -3454,106 +3453,160 @@ typedef NTSTATUS (NTAPI *KStrSupportHandler)( 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); + _In_ PIRP Irp, + _In_opt_ PVOID InitializeContext, + _In_opt_ PFNKSDEFAULTALLOCATE DefaultAllocate, + _In_opt_ PFNKSDEFAULTFREE DefaultFree, + _In_opt_ PFNKSINITIALIZEALLOCATOR InitializeAllocator, + _In_opt_ PFNKSDELETEALLOCATOR DeleteAllocator); -KSDDKAPI NTSTATUS NTAPI +_IRQL_requires_max_(PASSIVE_LEVEL) +KSDDKAPI +NTSTATUS +NTAPI KsValidateAllocatorFramingEx( - IN PKSALLOCATOR_FRAMING_EX Framing, - IN ULONG BufferSize, - IN const KSALLOCATOR_FRAMING_EX* PinFraming); + _In_ PKSALLOCATOR_FRAMING_EX Framing, + _In_ ULONG BufferSize, + _In_ const KSALLOCATOR_FRAMING_EX *PinFraming); + #endif /* =============================================================== 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); +_IRQL_requires_max_(DISPATCH_LEVEL) +typedef BOOLEAN +(NTAPI *PFNKSSETTIMER)( + _In_ PVOID Context, + _In_ PKTIMER Timer, + _In_ LARGE_INTEGER DueTime, + _In_ PKDPC Dpc); -typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)( - IN PVOID Context, - OUT PLONGLONG SystemTime); +_IRQL_requires_max_(DISPATCH_LEVEL) +typedef BOOLEAN +(NTAPI *PFNKSCANCELTIMER)( + _In_ PVOID Context, + _In_ PKTIMER Timer); -KSDDKAPI NTSTATUS NTAPI +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); + _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); -KSDDKAPI VOID NTAPI +_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); + _In_ PKSDEFAULTCLOCK DefaultClock, + _In_ LONGLONG Time); + #endif /* =============================================================== @@ -3562,6 +3615,7 @@ KsSetDefaultClockTime( /* Method sets - TODO: Make into macros! */ #if defined(_NTDDK_) + #if 0 VOID KSMETHOD_SET_IRP_STORAGE( @@ -3576,66 +3630,91 @@ KSMETHOD_TYPE_IRP_STORAGE( 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); + _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 /* =============================================================== 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); + _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 /* =============================================================== @@ -3660,634 +3739,856 @@ KsFastPropertyHandler( #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 - ); + _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); - -KSDDKAPI NTSTATUS NTAPI +_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); + _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 +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); + _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); -KSDDKAPI VOID NTAPI +_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); + _In_ PIRP Irp, + _In_ PKSPROPERTY Property, + _Inout_ PVOID Data, + _In_ ULONG DescriptorsCount, + _In_reads_(DescriptorsCount) const KSPIN_DESCRIPTOR *Descriptor); -KSDDKAPI NTSTATUS NTAPI +_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); + _In_ PIRP Irp, + _In_ PKSP_PIN Pin, + _Out_opt_ PVOID Data, + _In_ ULONG DescriptorsCount, + _In_reads_(DescriptorsCount) const KSPIN_DESCRIPTOR *Descriptor, + _In_ PFNKSINTERSECTHANDLER IntersectHandler); -KSDDKAPI NTSTATUS NTAPI +_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); + _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); -KSDDKAPI PKSFILTER NTAPI +_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 */ + _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 */ -KSDDKAPI BOOLEAN NTAPI +_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); + _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); -KSDDKAPI NTSTATUS NTAPI +_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); + _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); -KSDDKAPI VOID NTAPI +_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); + _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); -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); +_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); +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); + _In_ PVOID ImageBase, + _In_ POOL_TYPE PoolType, + _In_ ULONG_PTR ResourceName, + _In_ ULONG ResourceType, + _Outptr_result_bytebuffer_(ResourceSize) PVOID *Resource, + _Out_opt_ PULONG ResourceSize); -/* TODO: Implement -KSDDKAPI NTSTATUS NTAPI +_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 #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 - ); - + _In_ HANDLE ParentHandle, + _In_ PKSNODE_CREATE NodeCreate, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE NodeHandle); + #endif #endif @@ -4300,228 +4601,244 @@ 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); + _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); -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 *)( \ @@ -4529,55 +4846,57 @@ KsFilterFactoryGetParentDevice( 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 +4915,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 +4944,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 +4971,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 +5011,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 */ From 6356fb1d504b406803cf842e33bd5b6e14598e8c Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 17 Aug 2013 23:51:10 +0000 Subject: [PATCH 55/68] [PSDK] * Apply some formatting consistency in ks.h. svn path=/trunk/; revision=59768 --- reactos/include/psdk/ks.h | 1902 +++++++++++++++++-------------------- 1 file changed, 893 insertions(+), 1009 deletions(-) diff --git a/reactos/include/psdk/ks.h b/reactos/include/psdk/ks.h index 8949d61a282..839225208dc 100644 --- a/reactos/include/psdk/ks.h +++ b/reactos/include/psdk/ks.h @@ -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,244 +1229,224 @@ 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_) && !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; + +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]) _IRQL_requires_max_(PASSIVE_LEVEL) @@ -1530,136 +1465,121 @@ typedef NTSTATUS _In_ PVOID Context, _Inout_ PWCHAR *String); -typedef struct -{ - INTERFACE Interface; - PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; - PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; - PFNQUERYREFERENCESTRING QueryReferenceString; +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 { @@ -1713,16 +1633,16 @@ typedef BOOLEAN _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 { @@ -1733,153 +1653,143 @@ typedef struct { 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 @@ -1900,77 +1810,68 @@ 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_) @@ -1986,15 +1887,13 @@ typedef LONGLONG _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,\ @@ -2069,18 +1968,17 @@ 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 { @@ -2092,43 +1990,40 @@ 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 @@ -2151,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)\ @@ -2191,41 +2082,39 @@ 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_) @@ -2241,14 +2130,13 @@ typedef VOID _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 { @@ -2257,25 +2145,25 @@ typedef struct { _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 */ @@ -2291,9 +2179,9 @@ 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; _IRQL_requires_max_(PASSIVE_LEVEL) @@ -2368,18 +2256,17 @@ typedef NTSTATUS 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; _IRQL_requires_max_(DISPATCH_LEVEL) @@ -2409,10 +2296,10 @@ typedef void _Out_ PKSRESOLUTION Resolution); struct _KSCLOCK_DISPATCH { - PFNKSPINSETTIMER SetTimer; - PFNKSPINCANCELTIMER CancelTimer; - PFNKSPINCORRELATEDTIME CorrelatedTime; - PFNKSPINRESOLUTION Resolution; + PFNKSPINSETTIMER SetTimer; + PFNKSPINCANCELTIMER CancelTimer; + PFNKSPINCORRELATEDTIME CorrelatedTime; + PFNKSPINRESOLUTION Resolution; }; _IRQL_requires_max_(PASSIVE_LEVEL) @@ -2436,10 +2323,10 @@ typedef PVOID _In_ PVOID Buffer); struct _KSALLOCATOR_DISPATCH { - PFNKSPININITIALIZEALLOCATOR InitializeAllocator; - PFNKSDELETEALLOCATOR DeleteAllocator; - PFNKSDEFAULTALLOCATE Allocate; - PFNKSDEFAULTFREE Free; + PFNKSPININITIALIZEALLOCATOR InitializeAllocator; + PFNKSDELETEALLOCATOR DeleteAllocator; + PFNKSDEFAULTALLOCATE Allocate; + PFNKSDEFAULTFREE Free; }; typedef struct KSAUTOMATION_TABLE_ { @@ -2499,71 +2386,71 @@ typedef NTSTATUS _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; +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_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020 -#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040 -#define KSPIN_FLAG_ENFORCE_FIFO 0x00000080 -#define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100 +#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_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)\ @@ -2721,30 +2608,28 @@ typedef void (NTAPI *PFNKSFREE)( _In_ PVOID Data); -#define DEFINE_KSPROPERTY_TABLE(tablename)\ - const KSPROPERTY_ITEM tablename[] = +#define DEFINE_KSPROPERTY_TABLE(tablename) \ + const KSPROPERTY_ITEM tablename[] = -#endif +#endif /* _NTDDK_ */ -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 { @@ -2849,34 +2734,31 @@ typedef struct { 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; @@ -2896,13 +2778,14 @@ typedef struct /* =============================================================== XP / DX8 */ + #if defined(_NTDDK_) typedef struct _KSGATE KSGATE, *PKSGATE; struct _KSGATE { - LONG Count; - PKSGATE NextGate; + LONG Count; + PKSGATE NextGate; }; #ifndef _NTOS_ @@ -3136,50 +3019,48 @@ 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 { @@ -3200,14 +3081,12 @@ struct _KSPROCESSPIN_INDEXENTRY { ULONG Count; }; -#endif +#endif /* _NTDDK_ */ /* =============================================================== Device Dispatch */ - - #if defined(_NTDDK_) typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; @@ -3274,50 +3153,51 @@ typedef VOID _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; }; _IRQL_requires_max_(PASSIVE_LEVEL) @@ -3342,21 +3222,19 @@ typedef NTSTATUS (NTAPI *PFNKSFILTERVOID)( _In_ PKSFILTER Filter); -struct _KSFILTER_DISPATCH -{ - PFNKSFILTERIRP Create; - PFNKSFILTERIRP Close; - PFNKSFILTERPROCESS Process; - PFNKSFILTERVOID Reset; +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 }; @@ -3390,9 +3268,9 @@ struct _KSDEVICE_DESCRIPTOR { }; 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)\ @@ -3433,25 +3311,32 @@ 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); +#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); + #endif /* =============================================================== Allocator Functions */ + #if defined(_NTDDK_) _IRQL_requires_max_(PASSIVE_LEVEL) @@ -3499,11 +3384,12 @@ KsValidateAllocatorFramingEx( _In_ ULONG BufferSize, _In_ const KSALLOCATOR_FRAMING_EX *PinFraming); -#endif +#endif /* _NTDDK_ */ /* =============================================================== Clock Functions */ + #if defined(_NTDDK_) _IRQL_requires_max_(DISPATCH_LEVEL) @@ -3607,7 +3493,7 @@ KsSetDefaultClockTime( _In_ PKSDEFAULTCLOCK DefaultClock, _In_ LONGLONG Time); -#endif +#endif /* _NTDDK_ */ /* =============================================================== Method Functions @@ -3617,17 +3503,19 @@ KsSetDefaultClockTime( #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 _IRQL_requires_max_(PASSIVE_LEVEL) @@ -3664,7 +3552,7 @@ KsFastMethodHandler( _In_ ULONG MethodSetsCount, _In_reads_(MethodSetsCount) const KSMETHOD_SET *MethodSet); -#endif +#endif /* _NTDDK_ */ /* =============================================================== Property Functions @@ -3715,7 +3603,7 @@ KsFastPropertyHandler( _In_ ULONG PropertySetsCount, _In_reads_(PropertySetsCount) const KSPROPERTY_SET *PropertySet); -#endif +#endif /* _NTDDK_ */ /* =============================================================== Event Functions @@ -3730,13 +3618,13 @@ 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 _IRQL_requires_max_(DISPATCH_LEVEL) @@ -3935,7 +3823,6 @@ NTAPI KsPinGetNextSiblingPin( _In_ PKSPIN Pin); - /* Does this belong here? */ _IRQL_requires_max_(PASSIVE_LEVEL) @@ -3948,7 +3835,6 @@ KsHandleSizedListQuery( _In_ ULONG DataItemSize, _In_reads_bytes_(DataItemsCount * DataItemSize) const VOID *DataItems); - /* =============================================================== IRP Helper Functions */ @@ -4301,7 +4187,6 @@ KsWriteFile( _In_opt_ ULONG Key, _In_ KPROCESSOR_MODE RequestorMode); - KSDDKAPI NTSTATUS NTAPI @@ -4359,7 +4244,6 @@ KsQueueWorkItem( _In_ PKSWORKER Worker, _In_ PWORK_QUEUE_ITEM WorkItem); - /* =============================================================== Resources / Images */ @@ -4547,7 +4431,7 @@ NTAPI KsPinGetConnectedPinFileObject( _In_ PKSPIN Pin); -#else +#else /* _NTDDK_ */ #if !defined( KS_NO_CREATE_FUNCTIONS ) @@ -4591,7 +4475,7 @@ KsCreateTopologyNode( #endif -#endif +#endif /* _NTDDK_ */ /* =============================================================== AVStream Functions (XP / DirectX 8) @@ -4839,11 +4723,11 @@ KsFilterFactoryGetParentDevice( 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) @@ -5067,4 +4951,4 @@ KsFilterFactoryGetDevice( } #endif -#endif +#endif /* _KS_ */ From cb93ccc1d22e26eb0a80bdc1656d4c950050f356 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 18 Aug 2013 11:33:51 +0000 Subject: [PATCH 56/68] [SAMSRV] SampSetUserPassword: Fix check for vaild password hashes. svn path=/trunk/; revision=59769 --- reactos/dll/win32/samsrv/user.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/samsrv/user.c b/reactos/dll/win32/samsrv/user.c index d2f09189907..9c8a65145d3 100644 --- a/reactos/dll/win32/samsrv/user.c +++ b/reactos/dll/win32/samsrv/user.c @@ -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) From 5d3a6f80980f40795348b3fd7f7e3dbd71a6cd88 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 18 Aug 2013 13:26:33 +0000 Subject: [PATCH 57/68] [SAMLIB] SamSetInformationUser.UserAllInformation: Pass hashed passwords to SamrSetInformationUser. [SAMSRV] SampSetUserAll: - Get fixed user data at the start of the function and set it only if it has been modified. - Set user password hashes. svn path=/trunk/; revision=59770 --- reactos/dll/win32/samlib/samlib.c | 113 +++++++++++++++++++++++++++--- reactos/dll/win32/samsrv/samrpc.c | 108 +++++++++++++++++++--------- 2 files changed, 178 insertions(+), 43 deletions(-) diff --git a/reactos/dll/win32/samlib/samlib.c b/reactos/dll/win32/samlib/samlib.c index 961e2a5ed4d..471de041cd4 100644 --- a/reactos/dll/win32/samlib/samlib.c +++ b/reactos/dll/win32/samlib/samlib.c @@ -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 diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index 0f4ac20994f..3c8a9520a38 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -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,72 @@ 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); + 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_COUNTRYCODE) + { + FixedData.CountryCode = Buffer->All.CountryCode; + WriteFixedData = TRUE; + } + + if (WhichFields & USER_ALL_CODEPAGE) + { + FixedData.CodePage = Buffer->All.CodePage; + WriteFixedData = TRUE; + } + + 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) + { + LmPassword = (PENCRYPTED_LM_OWF_PASSWORD)Buffer->All.LmOwfPassword.Buffer; + LmPasswordPresent = Buffer->All.LmPasswordPresent; + } + + Status = SampSetUserPassword(UserObject, + NtPassword, + NtPasswordPresent, + LmPassword, + LmPasswordPresent); if (!NT_SUCCESS(Status)) goto done; - if (WhichFields & USER_ALL_PRIMARYGROUPID) - FixedData.PrimaryGroupId = Buffer->All.PrimaryGroupId; + /* The password has just been set */ + Status = NtQuerySystemTime(&FixedData.PasswordLastSet); + if (!NT_SUCCESS(Status)) + goto done; - 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; - - if (WhichFields & USER_ALL_COUNTRYCODE) - FixedData.CountryCode = Buffer->Preferences.CountryCode; - - if (WhichFields & USER_ALL_CODEPAGE) - FixedData.CodePage = Buffer->Preferences.CodePage; + /* FIXME: USER_ALL_PASSWORDEXPIRED */ + if (WriteFixedData == TRUE) + { Status = SampSetObjectAttribute(UserObject, L"F", REG_BINARY, @@ -7276,15 +7324,7 @@ SampSetUserAll(PSAM_DB_OBJECT UserObject, goto done; } -/* -FIXME: - USER_ALL_NTPASSWORDPRESENT - USER_ALL_LMPASSWORDPRESENT - USER_ALL_PASSWORDEXPIRED -*/ - done: - return Status; } From d914dce9a0526c0ec9b7b2977cdb24b4868bbe4e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 18 Aug 2013 14:47:51 +0000 Subject: [PATCH 58/68] [PSDK] * Annotate msi.h. svn path=/trunk/; revision=59771 --- reactos/include/psdk/msi.h | 1105 +++++++++++++++++++++++++++++++----- 1 file changed, 964 insertions(+), 141 deletions(-) diff --git a/reactos/include/psdk/msi.h b/reactos/include/psdk/msi.h index 10c3151c9cc..5e162e9a42b 100644 --- a/reactos/include/psdk/msi.h +++ b/reactos/include/psdk/msi.h @@ -23,6 +23,8 @@ #include #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 } From a93ca08cdc68bf0088fdee3a43762eab6ef5c16d Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 18 Aug 2013 17:47:19 +0000 Subject: [PATCH 59/68] [CPORTLIB/KDBG/FREELDR]: Fix CpGetByte and its callers -- it takes a 4th parameter for polling. [NTOSKRNL]: Implement InbvPortPollOnly and InbvPortGetByte. [NTOSKRNL]: Implement HeadlessCmdClearDisplay and HeadlessCmdGetByte. [SACDRV]: Implement the TimerDpcRoutine which calls HeadlessCmdGetByte. We now consume characters in the EMS port. [SACDRV]: Implement ConMgrSerialPortConsumer. We now do full VT-100 input parsing. DEL, BS, TAB, SPACE all work. Pressing ENTER results in an ASSERT in ConMgrProcessLine as expected. svn path=/trunk/; revision=59772 --- reactos/boot/freeldr/freeldr/comm/rs232.c | 2 +- .../boot/freeldr/freeldr/windows/headless.c | 4 +- reactos/drivers/sac/driver/conmgr.c | 392 ++++++++++++++---- reactos/drivers/sac/driver/data.c | 6 +- reactos/drivers/sac/driver/dispatch.c | 43 ++ reactos/drivers/sac/driver/sacdrv.h | 31 ++ reactos/drivers/sac/driver/util.c | 2 + .../include/reactos/libs/cportlib/cportlib.h | 3 +- reactos/lib/cportlib/cport.c | 6 +- reactos/ntoskrnl/ex/hdlsterm.c | 57 ++- reactos/ntoskrnl/inbv/inbvport.c | 19 + reactos/ntoskrnl/include/internal/hdl.h | 5 + reactos/ntoskrnl/include/internal/inbv.h | 13 + reactos/ntoskrnl/kd/i386/kdbg.c | 2 +- 14 files changed, 496 insertions(+), 89 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/comm/rs232.c b/reactos/boot/freeldr/freeldr/comm/rs232.c index 347ca0986e6..7f0d9d837a6 100644 --- a/reactos/boot/freeldr/freeldr/comm/rs232.c +++ b/reactos/boot/freeldr/freeldr/comm/rs232.c @@ -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); } /* diff --git a/reactos/boot/freeldr/freeldr/windows/headless.c b/reactos/boot/freeldr/freeldr/windows/headless.c index 40db235c7ca..515593adf46 100644 --- a/reactos/boot/freeldr/freeldr/windows/headless.c +++ b/reactos/boot/freeldr/freeldr/windows/headless.c @@ -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 diff --git a/reactos/drivers/sac/driver/conmgr.c b/reactos/drivers/sac/driver/conmgr.c index b012cad03f7..2b6406d5ab9 100644 --- a/reactos/drivers/sac/driver/conmgr.c +++ b/reactos/drivers/sac/driver/conmgr.c @@ -27,77 +27,11 @@ PSAC_CHANNEL SacChannel; ULONG ExecutePostConsumerCommand; PSAC_CHANNEL ExecutePostConsumerCommandData; +BOOLEAN InputInEscape, InputInEscTab, ConMgrLastCharWasCR; +CHAR InputBuffer[80]; + /* 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; - } - - /* 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; - } -} - VOID NTAPI SacPutString(IN PWCHAR String) @@ -512,6 +446,319 @@ ConMgrChannelOWrite(IN PSAC_CHANNEL Channel, return Status; } +VOID +NTAPI +ConMgrProcessInputLine(VOID) +{ + ASSERT(FALSE); +} + +#define Nothing 0 + +VOID +NTAPI +ConMgrSerialPortConsumer(VOID) +{ + NTSTATUS Status; + CHAR Char, LastChar; + CHAR WriteBuffer[2], 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 */ + WriteBuffer[0] = '\x1B'; + ChannelIWrite(CurrentChannel, WriteBuffer, 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 */ + WriteBuffer[0] = ANSI_NULL; + ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(CHAR)); + + /* Loop over every last character */ + do + { + /* Read every character in the channel, and strip whitespace */ + LastChar = ChannelIReadLast(CurrentChannel); + WriteBuffer[0] = LastChar; + } while ((!(LastChar) || + (LastChar == ' ') || + (LastChar == '\t')) && + (ChannelIBufferLength(CurrentChannel))); + + /* Write back into the channel the last character */ + ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(CHAR)); + + /* NULL-terminate the input buffer */ + WriteBuffer[0] = ANSI_NULL; + ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(WCHAR)); + + /* Now loop over every first character */ + do + { + /* Read every character in the channel, and strip whitespace */ + ChannelIRead(CurrentChannel, + ReadBuffer, + sizeof(ReadBuffer), + &ReadBufferSize); + WriteBuffer[0] = ReadBuffer[0]; + } 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(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 upcase 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); + + /* NULL-terminate it */ + WriteBuffer[0] = Char; + ChannelIWrite(CurrentChannel, WriteBuffer, 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, @@ -522,13 +769,6 @@ ConMgrGetChannelCloseMessage(IN PSAC_CHANNEL Channel, return STATUS_NOT_IMPLEMENTED; } -VOID -NTAPI -ConMgrProcessInputLine(VOID) -{ - ASSERT(FALSE); -} - NTSTATUS NTAPI ConMgrHandleEvent(IN ULONG EventCode, diff --git a/reactos/drivers/sac/driver/data.c b/reactos/drivers/sac/driver/data.c index 14e4b7480af..11fff653e3a 100644 --- a/reactos/drivers/sac/driver/data.c +++ b/reactos/drivers/sac/driver/data.c @@ -238,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 */ @@ -317,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, diff --git a/reactos/drivers/sac/driver/dispatch.c b/reactos/drivers/sac/driver/dispatch.c index 1af10f57d50..44ade239373 100644 --- a/reactos/drivers/sac/driver/dispatch.c +++ b/reactos/drivers/sac/driver/dispatch.c @@ -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 diff --git a/reactos/drivers/sac/driver/sacdrv.h b/reactos/drivers/sac/driver/sacdrv.h index f9e4daa7968..b2c697e4459 100644 --- a/reactos/drivers/sac/driver/sacdrv.h +++ b/reactos/drivers/sac/driver/sacdrv.h @@ -156,6 +156,7 @@ #define SAC_MAX_CHANNELS 10 #define SAC_SERIAL_PORT_BUFFER_SIZE 1024 // 1KB #define SAC_MAX_MESSAGES 200 +#define SAC_VTUTF8_COL_WIDTH 80 // // Channel flags @@ -766,6 +767,35 @@ ChannelDestroy( IN PSAC_CHANNEL Channel ); +NTSTATUS +NTAPI +ChannelIWrite( + IN PSAC_CHANNEL Channel, + IN PCHAR Buffer, + IN ULONG BufferSize +); + +UCHAR +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 // @@ -901,6 +931,7 @@ extern PSAC_MESSAGE_ENTRY GlobalMessageTable; extern KMUTEX CurrentChannelLock; extern LONG CurrentChannelRefCount; extern PCHAR SerialPortBuffer; +extern LONG SerialPortConsumerIndex, SerialPortProducerIndex; extern PCHAR Utf8ConversionBuffer; extern ULONG Utf8ConversionBufferSize; diff --git a/reactos/drivers/sac/driver/util.c b/reactos/drivers/sac/driver/util.c index c32f764856c..4c64e584c47 100644 --- a/reactos/drivers/sac/driver/util.c +++ b/reactos/drivers/sac/driver/util.c @@ -14,7 +14,9 @@ PCHAR Utf8ConversionBuffer; ULONG Utf8ConversionBufferSize = PAGE_SIZE; + PSAC_MACHINE_INFO MachineInformation; + PVOID RequestSacCmdEventObjectBody; PKEVENT RequestSacCmdEventWaitObjectBody; PVOID RequestSacCmdSuccessEventObjectBody; diff --git a/reactos/include/reactos/libs/cportlib/cportlib.h b/reactos/include/reactos/libs/cportlib/cportlib.h index ef62f54210e..9310ea45e8e 100644 --- a/reactos/include/reactos/libs/cportlib/cportlib.h +++ b/reactos/include/reactos/libs/cportlib/cportlib.h @@ -71,7 +71,8 @@ NTAPI CpGetByte( IN PCPPORT Port, OUT PUCHAR Byte, - IN BOOLEAN Wait + IN BOOLEAN Wait, + IN BOOLEAN Poll ); VOID diff --git a/reactos/lib/cportlib/cport.c b/reactos/lib/cportlib/cport.c index 8e493dd268a..4cad5b58934 100644 --- a/reactos/lib/cportlib/cport.c +++ b/reactos/lib/cportlib/cport.c @@ -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); diff --git a/reactos/ntoskrnl/ex/hdlsterm.c b/reactos/ntoskrnl/ex/hdlsterm.c index 20c71343c58..41c51712004 100644 --- a/reactos/ntoskrnl/ex/hdlsterm.c +++ b/reactos/ntoskrnl/ex/hdlsterm.c @@ -262,6 +262,7 @@ HdlspDispatch(IN HEADLESS_CMD Command, 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); @@ -328,8 +329,18 @@ HdlspDispatch(IN HEADLESS_CMD Command, Status = STATUS_SUCCESS; break; - case HeadlessCmdClearDisplay: - break; + case HeadlessCmdClearDisplay: + + /* Send the VT100 claer screen command if the terminal is enabled */ + if (HeadlessGlobals->TerminalEnabled) + { + HdlspSendStringAtBaud((PUCHAR)"\033[2J"); + } + + /* Return success either way */ + Status = STATUS_SUCCESS; + break; + case HeadlessCmdClearToEndOfDisplay: break; case HeadlessCmdClearToEndOfLine: @@ -344,8 +355,46 @@ HdlspDispatch(IN HEADLESS_CMD Command, 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: diff --git a/reactos/ntoskrnl/inbv/inbvport.c b/reactos/ntoskrnl/inbv/inbvport.c index 5f58cff96df..d0509becce3 100644 --- a/reactos/ntoskrnl/inbv/inbvport.c +++ b/reactos/ntoskrnl/inbv/inbvport.c @@ -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, diff --git a/reactos/ntoskrnl/include/internal/hdl.h b/reactos/ntoskrnl/include/internal/hdl.h index 073f1b9cb7f..2bd0b2fe766 100644 --- a/reactos/ntoskrnl/include/internal/hdl.h +++ b/reactos/ntoskrnl/include/internal/hdl.h @@ -192,6 +192,11 @@ 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( diff --git a/reactos/ntoskrnl/include/internal/inbv.h b/reactos/ntoskrnl/include/internal/inbv.h index d8446aa2305..867c39d2103 100644 --- a/reactos/ntoskrnl/include/internal/inbv.h +++ b/reactos/ntoskrnl/include/internal/inbv.h @@ -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; diff --git a/reactos/ntoskrnl/kd/i386/kdbg.c b/reactos/ntoskrnl/kd/i386/kdbg.c index 93084d69b68..0607112584b 100644 --- a/reactos/ntoskrnl/kd/i386/kdbg.c +++ b/reactos/ntoskrnl/kd/i386/kdbg.c @@ -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 From 57ec941f0f899b796e0a2b54114b0560de105f9d Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 18 Aug 2013 17:51:56 +0000 Subject: [PATCH 60/68] [KDCOM]: Also adhere to new standard. svn path=/trunk/; revision=59773 --- reactos/drivers/base/kdcom/kdcom.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/base/kdcom/kdcom.c b/reactos/drivers/base/kdcom/kdcom.c index aa147f6bc30..d808025cf7b 100644 --- a/reactos/drivers/base/kdcom/kdcom.c +++ b/reactos/drivers/base/kdcom/kdcom.c @@ -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; } From d1f2547346d19bb2080afff1b7c4f8728a340fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 18 Aug 2013 19:46:22 +0000 Subject: [PATCH 61/68] [BASESRV] Add vdm.c for Virtual DOS Machines management. svn path=/trunk/; revision=59774 --- reactos/subsystems/win/basesrv/vdm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 reactos/subsystems/win/basesrv/vdm.c diff --git a/reactos/subsystems/win/basesrv/vdm.c b/reactos/subsystems/win/basesrv/vdm.c new file mode 100644 index 00000000000..504874e4638 --- /dev/null +++ b/reactos/subsystems/win/basesrv/vdm.c @@ -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 Management + * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr) + */ + +/* INCLUDES *******************************************************************/ + +#include "basesrv.h" + +#define NDEBUG +#include + +/* EOF */ From f47701b71dae9b0af422d6c01098b389dfc5d575 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 18 Aug 2013 20:05:32 +0000 Subject: [PATCH 62/68] [RSYM] * Add a flag (-s) to pass the source folder. This allows it to set the debug file paths relatively to that source folder. Brought to you by Arty. [CMAKE] * Leverage the new rsym flag. The rossym file paths are no longer absolute. svn path=/trunk/; revision=59775 --- reactos/cmake/gcc.cmake | 8 +-- reactos/tools/rsym/rsym.c | 108 +++++++++++++++++++++++++++++++++++--- 2 files changed, 105 insertions(+), 11 deletions(-) diff --git a/reactos/cmake/gcc.cmake b/reactos/cmake/gcc.cmake index 1f2216030f4..4c3872763e6 100644 --- a/reactos/cmake/gcc.cmake +++ b/reactos/cmake/gcc.cmake @@ -143,16 +143,16 @@ else() get_target_property(RSYM native-rsym IMPORTED_LOCATION_NOCONFIG) set(CMAKE_C_LINK_EXECUTABLE " ${CMAKE_C_FLAGS} -o " - "${RSYM} ") + "${RSYM} -s ${REACTOS_SOURCE_DIR} ") set(CMAKE_CXX_LINK_EXECUTABLE " ${CMAKE_CXX_FLAGS} -o " - "${RSYM} ") + "${RSYM} -s ${REACTOS_SOURCE_DIR} ") set(CMAKE_C_CREATE_SHARED_LIBRARY " ${CMAKE_C_FLAGS} -o " - "${RSYM} ") + "${RSYM} -s ${REACTOS_SOURCE_DIR} ") set(CMAKE_CXX_CREATE_SHARED_LIBRARY " ${CMAKE_CXX_FLAGS} -o " - "${RSYM} ") + "${RSYM} -s ${REACTOS_SOURCE_DIR} ") set(CMAKE_RC_CREATE_SHARED_LIBRARY " ${CMAKE_C_FLAGS} -o ") endif() diff --git a/reactos/tools/rsym/rsym.c b/reactos/tools/rsym/rsym.c index fadcb0b324e..44a9b950b5c 100644 --- a/reactos/tools/rsym/rsym.c +++ b/reactos/tools/rsym/rsym.c @@ -464,6 +464,8 @@ struct DbgHelpStringTab { ULONG NumberOfSymbols; void *process; DWORD module_base; + char *PathChop; + char *SourcePath; struct DbgHelpLineEntry *lastLineEntry; }; @@ -532,6 +534,21 @@ DbgHelpGetString(struct DbgHelpStringTab *tab, int id) return tab->Table[bucket][i]; } +/* Remove a prefix of PathChop if it exists and return a copy of the tail. */ +static char * +StrDupShortenPath(char *PathChop, char *FilePath) +{ + int pclen = strlen(PathChop); + if (!strncmp(FilePath, PathChop, pclen)) + { + return strdup(FilePath+pclen); + } + else + { + return strdup(FilePath); + } +} + static BOOL DbgHelpAddLineNumber(PSRCCODEINFO LineInfo, void *UserContext) { @@ -542,7 +559,48 @@ DbgHelpAddLineNumber(PSRCCODEINFO LineInfo, void *UserContext) if (!pSymbol) return FALSE; memset(pSymbol, 0, FIELD_OFFSET(SYMBOL_INFO, Name[MAX_SYM_NAME])); - fileId = DbgHelpAddStringToTable(tab, strdup(LineInfo->FileName)); + /* If any file can be opened by relative path up to a certain level, then + record that path. */ + if (!tab->PathChop) + { + int i, endLen; + char *end = strrchr(LineInfo->FileName, '/'); + + if (!end) + end = strrchr(LineInfo->FileName, '\\'); + + if (end) + { + for (i = (end - LineInfo->FileName) - 1; i >= 0; i--) + { + if (LineInfo->FileName[i] == '/' || LineInfo->FileName[i] == '\\') + { + char *synthname = malloc(strlen(tab->SourcePath) + + strlen(LineInfo->FileName + i + 1) + + 2); + strcpy(synthname, tab->SourcePath); + strcat(synthname, "/"); + strcat(synthname, LineInfo->FileName + i + 1); + FILE *f = fopen(synthname, "r"); + free(synthname); + if (f) + { + fclose(f); + break; + } + } + } + + i++; /* Be in the string or past the next slash */ + tab->PathChop = malloc(i + 1); + memcpy(tab->PathChop, LineInfo->FileName, i); + tab->PathChop[i] = 0; + } + } + + fileId = DbgHelpAddStringToTable(tab, + StrDupShortenPath(tab->PathChop, + LineInfo->FileName)); pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO); pSymbol->MaxNameLen = MAX_SYM_NAME; @@ -570,7 +628,7 @@ DbgHelpAddLineNumber(PSRCCODEINFO LineInfo, void *UserContext) } static int -ConvertDbgHelp(void *process, DWORD module_base, +ConvertDbgHelp(void *process, DWORD module_base, char *SourcePath, ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, ULONG *StringsLength, void **StringsBase) { @@ -589,6 +647,8 @@ ConvertDbgHelp(void *process, DWORD module_base, strtab.CurLineEntries = 0; strtab.LineEntries = 16384; strtab.LineEntryData = calloc(strtab.LineEntries, sizeof(struct DbgHelpLineEntry)); + strtab.PathChop = NULL; + strtab.SourcePath = SourcePath ? SourcePath : ""; SymEnumLines(process, module_base, NULL, NULL, DbgHelpAddLineNumber, &strtab); @@ -636,6 +696,7 @@ ConvertDbgHelp(void *process, DWORD module_base, } free(strtab.LineEntryData); + free(strtab.PathChop); qsort(*SymbolsBase, *SymbolsCount, sizeof(ROSSYM_ENTRY), (int (*)(const void *, const void *))CompareSymEntry); @@ -1123,15 +1184,47 @@ int main(int argc, char* argv[]) void *file; char elfhdr[4] = { '\177', 'E', 'L', 'F' }; BOOLEAN UseDbgHelp = FALSE; + int arg, argstate = 0; + char *SourcePath = NULL; - if (argc != 3) + for (arg = 1; arg < argc; arg++) { - fprintf(stderr, "Usage: rsym \n"); - exit(1); + switch (argstate) + { + default: + argstate = -1; + break; + + case 0: + if (!strcmp(argv[arg], "-s")) + { + argstate = 1; + } + else + { + argstate = 2; + path1 = convert_path(argv[arg]); + } + break; + + case 1: + free(SourcePath); + SourcePath = strdup(argv[arg]); + argstate = 0; + break; + + case 2: + path2 = convert_path(argv[arg]); + argstate = 3; + break; + } } - path1 = convert_path(argv[1]); - path2 = convert_path(argv[2]); + if (argstate != 3) + { + fprintf(stderr, "Usage: rsym [-s ] \n"); + exit(1); + } FileData = load_file(path1, &FileSize); if (!FileData) @@ -1192,6 +1285,7 @@ int main(int argc, char* argv[]) if (ConvertDbgHelp(FileData, module_base, + SourcePath, &StabSymbolsCount, &StabSymbols, &StringsLength, From a02dab8fb2b03e8dbb9a874c83c108d371489b64 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 18 Aug 2013 21:05:58 +0000 Subject: [PATCH 63/68] [NTOSKRNL] * Fix a comment typo. CORE-7393 #resolve #comment Thanks. svn path=/trunk/; revision=59776 --- reactos/ntoskrnl/ex/hdlsterm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ex/hdlsterm.c b/reactos/ntoskrnl/ex/hdlsterm.c index 41c51712004..0eddf857a27 100644 --- a/reactos/ntoskrnl/ex/hdlsterm.c +++ b/reactos/ntoskrnl/ex/hdlsterm.c @@ -331,7 +331,7 @@ HdlspDispatch(IN HEADLESS_CMD Command, case HeadlessCmdClearDisplay: - /* Send the VT100 claer screen command if the terminal is enabled */ + /* Send the VT100 clear screen command if the terminal is enabled */ if (HeadlessGlobals->TerminalEnabled) { HdlspSendStringAtBaud((PUCHAR)"\033[2J"); From ed35b983f9801731c9358b7b8b5f90e0696c073c Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 18 Aug 2013 21:43:47 +0000 Subject: [PATCH 64/68] [SAMSRV] Implement the last part of SamrSetInformationUser.UserAllInformation: USER_ALL_PASSWORDEXPIRED. svn path=/trunk/; revision=59777 --- reactos/dll/win32/samsrv/samrpc.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index 3c8a9520a38..e0df2446f7d 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -7311,7 +7311,24 @@ SampSetUserAll(PSAM_DB_OBJECT UserObject, WriteFixedData = TRUE; } - /* FIXME: USER_ALL_PASSWORDEXPIRED */ + 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) { From 519595d9c4cb5ff485a146a1938f04b523e8684e Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Mon, 19 Aug 2013 03:32:39 +0000 Subject: [PATCH 65/68] [SACDRV]: IReadLast returns WCHAR, not CHAR. [SACDRV]: Implement VtUtf8 case in ChannelInitializeVTable. [SACDRV]: Implement DoHelpCommand, reformat concmd.c to standards. [SACDRV]: ConMgrInitialize shoudl setup the SAC channel as VtUtf8, not Raw. I guess it was set to Raw since VtUtf8 wasn't yet implemented, however this breaks the command parsing since it expects WCHAR's. Make a note of this, and temporarily hack ConMgrSerialPortConsumer to work with CHAR's from a Raw channel. [SACDRV]: Implement ConMgrProcessInputLine, which calls out the appopriate helpers. [SACDRV]: Fixes to parsing in ConMgrSerialPortConsumer [SACDRV]: Document, reformat, and fix some of the bugs in the RawChannelI* commands. [SACDRV]: Implement simple (ANSI) case of SacTranslateUtf8ToUnicode. [SACDRV]: Implement SacFormatMessage and GetMessageLineCount. [SACDRV]: Start implementing VT-UTF8 support. Input routines are done, output routines are still WIP. [SACMSG]: Fix the messages in the .MC file. Stuff is now being output correctly. If using Putty, make sure to turn on "Implicit CR in every LF" in Settings->Terminal. svn path=/trunk/; revision=59778 --- reactos/drivers/sac/driver/chanmgr.c | 2 - reactos/drivers/sac/driver/channel.c | 20 +- reactos/drivers/sac/driver/concmd.c | 310 ++++++++++--------- reactos/drivers/sac/driver/conmgr.c | 163 ++++++++-- reactos/drivers/sac/driver/rawchan.c | 132 ++++---- reactos/drivers/sac/driver/sacdrv.h | 210 ++++++++++++- reactos/drivers/sac/driver/util.c | 159 ++++++++-- reactos/drivers/sac/driver/vtutf8chan.c | 388 +++++++++++++++++++----- reactos/include/reactos/mc/sacmsg.mc | 87 ++++-- 9 files changed, 1112 insertions(+), 359 deletions(-) diff --git a/reactos/drivers/sac/driver/chanmgr.c b/reactos/drivers/sac/driver/chanmgr.c index 8e726f6dfb0..9b2878b91a2 100644 --- a/reactos/drivers/sac/driver/chanmgr.c +++ b/reactos/drivers/sac/driver/chanmgr.c @@ -404,7 +404,6 @@ ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel, if (i == SAC_MAX_CHANNELS) { /* Bail out */ - SAC_DBG(SAC_DBG_INIT, "failing here: %d %lx\n", __LINE__, Status); goto ReturnStatus; } @@ -438,7 +437,6 @@ ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel, else { /* We couldn't create it, free the buffer */ - SAC_DBG(SAC_DBG_INIT, "failing here: %d %lx\n", __LINE__, Status); SacFreePool(NewChannel); } diff --git a/reactos/drivers/sac/driver/channel.c b/reactos/drivers/sac/driver/channel.c index 0ee165d7066..0476b591cfe 100644 --- a/reactos/drivers/sac/driver/channel.c +++ b/reactos/drivers/sac/driver/channel.c @@ -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 */ diff --git a/reactos/drivers/sac/driver/concmd.c b/reactos/drivers/sac/driver/concmd.c index 76d6edbfe47..c515ce2dc48 100644 --- a/reactos/drivers/sac/driver/concmd.c +++ b/reactos/drivers/sac/driver/concmd.c @@ -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"); + return STATUS_NOT_IMPLEMENTED; +} - /* Get the current time now, and setup a timeout in 1 second */ - KeQueryTickCount(&TickCount); - Timeout.QuadPart = TickCount.QuadPart / (10000000 / KeQueryTimeIncrement()); +NTSTATUS +DoChannelCloseByNameCommand( + IN PCHAR Count + ) +{ + return STATUS_NOT_IMPLEMENTED; +} - /* Check if the timeout is small enough */ - if (Timeout.QuadPart < 60 ) - { - /* Show the prompt */ - ConMgrSimpleEventMessage(Reboot ? - SAC_RESTART_PROMPT : SAC_SHUTDOWN_PROMPT, - TRUE); +NTSTATUS +DoChannelCloseByIndexCommand( + IN ULONG ChannelIndex + ) +{ + return STATUS_NOT_IMPLEMENTED; +} - /* Do the wait */ - KeInitializeEvent(&Event, SynchronizationEvent, 0); - Timeout.QuadPart = -10000000 * (60 - Timeout.LowPart); - KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, &Timeout); - } +NTSTATUS +DoChannelSwitchByNameCommand( + IN PCHAR Count + ) +{ + return STATUS_NOT_IMPLEMENTED; +} - /* 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"); +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()); + + /* 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); + } + + /* 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 +NTAPI +DoFullInfoCommand(VOID) { } VOID -DoPagingCommand( - VOID - ) +NTAPI +DoPagingCommand(VOID) { } VOID -DoSetTimeCommand( - IN PCHAR InputTime - ) +NTAPI +DoSetTimeCommand(IN PCHAR InputTime) { } VOID -DoKillCommand( - IN PCHAR KillString - ) +NTAPI +DoKillCommand(IN PCHAR KillString) { } VOID -DoLowerPriorityCommand( - IN PCHAR PrioString - ) +NTAPI +DoLowerPriorityCommand(IN PCHAR PrioString) { } VOID -DoRaisePriorityCommand( - IN PCHAR PrioString - ) +NTAPI +DoRaisePriorityCommand(IN PCHAR PrioString) { } VOID -DoLimitMemoryCommand( - IN PCHAR LimitString - ) +NTAPI +DoLimitMemoryCommand(IN PCHAR LimitString) { } VOID -DoCrashCommand( - VOID - ) +NTAPI +DoCrashCommand(VOID) { } VOID -DoMachineInformationCommand( - VOID - ) -{ - -} - -NTSTATUS -DoChannelListCommand( - VOID - ) -{ - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -DoChannelCloseByNameCommand( - IN PCHAR Count - ) -{ - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -DoChannelCloseByIndexCommand( - IN ULONG ChannelIndex - ) -{ - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -DoChannelSwitchByNameCommand( - IN PCHAR Count - ) -{ - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -DoChannelSwitchByIndexCommand( - IN ULONG ChannelIndex - ) -{ - return STATUS_NOT_IMPLEMENTED; -} - -VOID -DoChannelCommand( - IN PCHAR ChannelString - ) +NTAPI +DoMachineInformationCommand(VOID) { } VOID -DoCmdCommand( - VOID - ) +NTAPI +DoChannelCommand(IN PCHAR ChannelString) { } VOID -DoLockCommand( - VOID - ) +NTAPI +DoCmdCommand(IN PCHAR InputString) { } VOID -DoHelpCommand( - 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 +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 +NTAPI +DoGetNetInfo(IN BOOLEAN DoPrint) { } VOID -DoGetNetInfo( - IN BOOLEAN DoPrint - ) +NTAPI +DoSetIpAddressCommand(IN PCHAR IpString) { } VOID -DoSetIpAddressCommand( - IN PCHAR IpString - ) +NTAPI +DoTlistCommand(VOID) { - -} -VOID -DoTlistCommand( - VOID - ) -{ - -} \ No newline at end of file +} diff --git a/reactos/drivers/sac/driver/conmgr.c b/reactos/drivers/sac/driver/conmgr.c index 2b6406d5ab9..fda85472bc5 100644 --- a/reactos/drivers/sac/driver/conmgr.c +++ b/reactos/drivers/sac/driver/conmgr.c @@ -169,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); @@ -438,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(); @@ -446,22 +447,137 @@ ConMgrChannelOWrite(IN PSAC_CHANNEL Channel, return Status; } +#define Shutdown 1 +#define Restart 3 +#define Nothing 0 +BOOLEAN GlobalPagingNeeded; + VOID NTAPI ConMgrProcessInputLine(VOID) { - ASSERT(FALSE); -} + BOOLEAN EnablePaging; + NTSTATUS Status; -#define Nothing 0 + 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 ConMgrSerialPortConsumer(VOID) { NTSTATUS Status; - CHAR Char, LastChar; - CHAR WriteBuffer[2], ReadBuffer[2]; + CHAR Char; + WCHAR LastChar; + CHAR ReadBuffer[2]; ULONG ReadBufferSize, i; WCHAR StringBuffer[2]; SAC_DBG(SAC_DBG_MACHINE, "SAC TimerDpcRoutine: Entering.\n"); //bug @@ -546,8 +662,8 @@ ConMgrSerialPortConsumer(VOID) if ((InputInEscape) && (CurrentChannel != SacChannel)) { /* Store the ESC in the current channel buffer */ - WriteBuffer[0] = '\x1B'; - ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(CHAR)); + ReadBuffer[0] = '\x1B'; + ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR)); } /* Check if we are no longer pressing ESC and exit the mode if so */ @@ -582,26 +698,26 @@ DoLineParsing: ChannelIReadLast(CurrentChannel); /* NULL-terminate the channel's input buffer */ - WriteBuffer[0] = ANSI_NULL; - ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(CHAR)); + 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); - WriteBuffer[0] = LastChar; + ReadBuffer[0] = (CHAR) LastChar; } while ((!(LastChar) || - (LastChar == ' ') || - (LastChar == '\t')) && + (LastChar == L' ') || + (LastChar == L'\t')) && (ChannelIBufferLength(CurrentChannel))); /* Write back into the channel the last character */ - ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(CHAR)); + ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR)); /* NULL-terminate the input buffer */ - WriteBuffer[0] = ANSI_NULL; - ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(WCHAR)); + ReadBuffer[0] = ANSI_NULL; + ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR)); /* Now loop over every first character */ do @@ -609,11 +725,10 @@ DoLineParsing: /* Read every character in the channel, and strip whitespace */ ChannelIRead(CurrentChannel, ReadBuffer, - sizeof(ReadBuffer), + sizeof(CHAR), /* FIXME: Should be sizeof(ReadBuffer) */ &ReadBufferSize); - WriteBuffer[0] = ReadBuffer[0]; } while ((ReadBufferSize) && - ((ReadBuffer[0] != ' ') || (ReadBuffer[0] != '\t'))); + ((ReadBuffer[0] == ' ') || (ReadBuffer[0] == '\t'))); /* We read one more than we should, so treat that as our first one */ InputBuffer[0] = ReadBuffer[0]; @@ -625,7 +740,7 @@ DoLineParsing: /* Read each character -- there should be max 80 */ ChannelIRead(CurrentChannel, ReadBuffer, - sizeof(ReadBuffer), + sizeof(CHAR), /* FIXME: Should be sizeof(ReadBuffer) */ &ReadBufferSize); ASSERT(i < SAC_VTUTF8_COL_WIDTH); InputBuffer[i++] = ReadBuffer[0]; @@ -637,7 +752,7 @@ DoLineParsing: /* Again it should be less than 80 characters */ ASSERT(i < SAC_VTUTF8_COL_WIDTH); - /* And upcase each character */ + /* And downbase each character */ Char = InputBuffer[i]; if ((Char >= 'A') && (Char <= 'Z')) InputBuffer[i] = Char + ' '; } @@ -700,9 +815,9 @@ DoLineParsing: ChannelIReadLast(CurrentChannel); ChannelIReadLast(CurrentChannel); - /* NULL-terminate it */ - WriteBuffer[0] = Char; - ChannelIWrite(CurrentChannel, WriteBuffer, sizeof(CHAR)); + /* Write the last character that was just typed in */ + ReadBuffer[0] = Char; + ChannelIWrite(CurrentChannel, ReadBuffer, sizeof(CHAR)); continue; } diff --git a/reactos/drivers/sac/driver/rawchan.c b/reactos/drivers/sac/driver/rawchan.c index 098d78dd97a..ad0669a9ad5 100644 --- a/reactos/drivers/sac/driver/rawchan.c +++ b/reactos/drivers/sac/driver/rawchan.c @@ -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,38 +195,6 @@ RawChannelOFlush(IN PSAC_CHANNEL Channel) return ConMgrFlushData(Channel); } -ULONG -NTAPI -RawChannelGetIBufferIndex(IN PSAC_CHANNEL Channel) -{ - ASSERT(Channel); - ASSERT(Channel->IBufferIndex < SAC_RAW_IBUFFER_SIZE); - - return Channel->IBufferIndex; -} - -VOID -NTAPI -RawChannelSetIBufferIndex(IN PSAC_CHANNEL Channel, - IN ULONG BufferIndex) -{ - NTSTATUS Status; - ASSERT(Channel); - ASSERT(Channel->IBufferIndex < SAC_RAW_IBUFFER_SIZE); - - 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, @@ -256,6 +212,40 @@ RawChannelOWrite(IN PSAC_CHANNEL Channel, return RawChannelOWrite2(Channel, String, Length); } +ULONG +NTAPI +RawChannelGetIBufferIndex(IN PSAC_CHANNEL Channel) +{ + ASSERT(Channel); + ASSERT(Channel->IBufferIndex < SAC_RAW_IBUFFER_SIZE); + + /* Return the current buffer index */ + return Channel->IBufferIndex; +} + +VOID +NTAPI +RawChannelSetIBufferIndex(IN PSAC_CHANNEL Channel, + IN ULONG BufferIndex) +{ + NTSTATUS Status; + 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; + _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 NTAPI RawChannelIRead(IN PSAC_CHANNEL Channel, @@ -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; } diff --git a/reactos/drivers/sac/driver/sacdrv.h b/reactos/drivers/sac/driver/sacdrv.h index b2c697e4459..17fd29671ac 100644 --- a/reactos/drivers/sac/driver/sacdrv.h +++ b/reactos/drivers/sac/driver/sacdrv.h @@ -157,6 +157,7 @@ #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 @@ -302,7 +303,7 @@ ULONG ); typedef -CHAR +WCHAR (NTAPI *PSAC_CHANNEL_IREAD_LAST)( IN struct _SAC_CHANNEL* Channel ); @@ -775,7 +776,7 @@ ChannelIWrite( IN ULONG BufferSize ); -UCHAR +WCHAR NTAPI ChannelIReadLast( IN PSAC_CHANNEL Channel @@ -864,7 +865,7 @@ RawChannelIBufferLength( IN PSAC_CHANNEL Channel ); -CHAR +WCHAR NTAPI RawChannelIReadLast( IN PSAC_CHANNEL Channel @@ -878,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( @@ -923,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 // @@ -933,7 +1127,9 @@ 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 @@ -1046,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; +} diff --git a/reactos/drivers/sac/driver/util.c b/reactos/drivers/sac/driver/util.c index 4c64e584c47..29330c00e2d 100644 --- a/reactos/drivers/sac/driver/util.c +++ b/reactos/drivers/sac/driver/util.c @@ -34,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, @@ -151,8 +201,76 @@ 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 @@ -1105,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, @@ -1131,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) @@ -1159,14 +1286,6 @@ CopyAndInsertStringAtInterval( return STATUS_NOT_IMPLEMENTED; } -ULONG -GetMessageLineCount( - IN ULONG MessageIndex - ) -{ - return 0; -} - NTSTATUS RegisterSacCmdEvent( IN PVOID Object, diff --git a/reactos/drivers/sac/driver/vtutf8chan.c b/reactos/drivers/sac/driver/vtutf8chan.c index 26f80d8b448..946a90ceafe 100644 --- a/reactos/drivers/sac/driver/vtutf8chan.c +++ b/reactos/drivers/sac/driver/vtutf8chan.c @@ -1,36 +1,109 @@ /* - * 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 +NTAPI +VTUTF8ChannelDestroy(IN PSAC_CHANNEL Channel) +{ + 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 +NTAPI VTUTF8ChannelORead( IN PSAC_CHANNEL Channel, IN PCHAR Buffer, @@ -41,17 +114,8 @@ VTUTF8ChannelORead( return STATUS_NOT_IMPLEMENTED; } -NTSTATUS -VTUTF8ChannelOEcho( - IN PSAC_CHANNEL Channel, - IN PWCHAR String, - IN ULONG Size - ) -{ - 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; } diff --git a/reactos/include/reactos/mc/sacmsg.mc b/reactos/include/reactos/mc/sacmsg.mc index 4802bc0ccf1..34333c429d8 100644 --- a/reactos/include/reactos/mc/sacmsg.mc +++ b/reactos/include/reactos/mc/sacmsg.mc @@ -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 @@ -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 for next channel.\nPress 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 for next channel. +Press 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 Switch to a channel by its name.\nch -ci <#> Close a channel by its number.\nch -cn Close a channel by its name.\n\nPress to select a channel.\nPress 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 Switch to a channel by its name. +ch -ci <#> Close a channel by its number. +ch -cn Close a channel by its name. + +Press to select a channel. +Press 0 to return to the SAC channel. . MessageId=137 @@ -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. . From 4203172aa087639aa40480ee335a22233088d858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 19 Aug 2013 17:50:27 +0000 Subject: [PATCH 66/68] [KERNEL32] Use some existing #define'd constants. [CSRSRV-BASESRV] - Add CSR version define (based from BASESRV version define). - Add missing BASESRV structures, taken from https://code.google.com/p/ontl/source/browse/branches/devel/ntl/nt/csr.hxx (OpenNT Native Template Library). svn path=/trunk/; revision=59779 --- reactos/dll/ntdll/csr/connect.c | 2 +- reactos/dll/win32/kernel32/client/dosdev.c | 8 +- .../dll/win32/kernel32/client/file/filename.c | 2 +- reactos/dll/win32/kernel32/client/proc.c | 18 +- reactos/dll/win32/kernel32/client/vdm.c | 9 +- reactos/include/reactos/subsys/csr/csrmsg.h | 9 +- reactos/include/reactos/subsys/win/basemsg.h | 168 ++++++++++++++---- reactos/subsystems/win/basesrv/dosdev.c | 10 +- reactos/subsystems/win/basesrv/proc.c | 14 +- reactos/subsystems/win/basesrv/vdm.c | 2 +- 10 files changed, 164 insertions(+), 78 deletions(-) diff --git a/reactos/dll/ntdll/csr/connect.c b/reactos/dll/ntdll/csr/connect.c index a7bf85a32a4..163eecbc9dd 100644 --- a/reactos/dll/ntdll/csr/connect.c +++ b/reactos/dll/ntdll/csr/connect.c @@ -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, diff --git a/reactos/dll/win32/kernel32/client/dosdev.c b/reactos/dll/win32/kernel32/client/dosdev.c index bf6c991cbf6..a7a7aba7656 100644 --- a/reactos/dll/win32/kernel32/client/dosdev.c +++ b/reactos/dll/win32/kernel32/client/dosdev.c @@ -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, diff --git a/reactos/dll/win32/kernel32/client/file/filename.c b/reactos/dll/win32/kernel32/client/file/filename.c index 0fe744978ee..cf13a5c95e3 100644 --- a/reactos/dll/win32/kernel32/client/file/filename.c +++ b/reactos/dll/win32/kernel32/client/file/filename.c @@ -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 }; diff --git a/reactos/dll/win32/kernel32/client/proc.c b/reactos/dll/win32/kernel32/client/proc.c index bb2bda4a858..7c015d293ce 100644 --- a/reactos/dll/win32/kernel32/client/proc.c +++ b/reactos/dll/win32/kernel32/client/proc.c @@ -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)); diff --git a/reactos/dll/win32/kernel32/client/vdm.c b/reactos/dll/win32/kernel32/client/vdm.c index 69a701079db..11528b07e74 100644 --- a/reactos/dll/win32/kernel32/client/vdm.c +++ b/reactos/dll/win32/kernel32/client/vdm.c @@ -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; } diff --git a/reactos/include/reactos/subsys/csr/csrmsg.h b/reactos/include/reactos/subsys/csr/csrmsg.h index b750aff6d65..a7d08cf2d7d 100644 --- a/reactos/include/reactos/subsys/csr/csrmsg.h +++ b/reactos/include/reactos/subsys/csr/csrmsg.h @@ -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) \ @@ -64,6 +57,8 @@ typedef struct _CSR_CONNECTION_INFO HANDLE ProcessId; } CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO; +#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); diff --git a/reactos/include/reactos/subsys/win/basemsg.h b/reactos/include/reactos/subsys/win/basemsg.h index 88757447489..8f4c5e4667b 100644 --- a/reactos/include/reactos/subsys/win/basemsg.h +++ b/reactos/include/reactos/subsys/win/basemsg.h @@ -52,6 +52,21 @@ typedef enum _BASESRV_API_NUMBER BasepMaxApiNumber } BASESRV_API_NUMBER, *PBASESRV_API_NUMBER; + +typedef struct +{ + 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; @@ -94,11 +109,6 @@ typedef struct HANDLE ThreadHandle; } BASE_CREATE_THREAD, *PBASE_CREATE_THREAD; -typedef struct -{ - UINT uExitCode; -} BASE_EXIT_PROCESS, *PBASE_EXIT_PROCESS; - typedef struct { UINT UniqueID; @@ -106,28 +116,33 @@ typedef struct typedef struct { - ULONG iTask; + UINT uExitCode; +} BASE_EXIT_PROCESS, *PBASE_EXIT_PROCESS; + +typedef struct +{ + 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 { - DWORD Level; - DWORD Flags; -} BASE_GET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GET_PROCESS_SHUTDOWN_PARAMS; + ULONG ShutdownLevel; + ULONG ShutdownFlags; +} BASE_GETSET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GETSET_PROCESS_SHUTDOWN_PARAMS; + +typedef struct +{ + 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; diff --git a/reactos/subsystems/win/basesrv/dosdev.c b/reactos/subsystems/win/basesrv/dosdev.c index 148c2ea4f87..bd803eb3068 100644 --- a/reactos/subsystems/win/basesrv/dosdev.c +++ b/reactos/subsystems/win/basesrv/dosdev.c @@ -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)); diff --git a/reactos/subsystems/win/basesrv/proc.c b/reactos/subsystems/win/basesrv/proc.c index 87053725108..ac06ed6d38a 100644 --- a/reactos/subsystems/win/basesrv/proc.c +++ b/reactos/subsystems/win/basesrv/proc.c @@ -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/reactos/subsystems/win/basesrv/vdm.c b/reactos/subsystems/win/basesrv/vdm.c index 504874e4638..d698f4a1661 100644 --- a/reactos/subsystems/win/basesrv/vdm.c +++ b/reactos/subsystems/win/basesrv/vdm.c @@ -2,7 +2,7 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS Base API Server DLL * FILE: subsystems/win/basesrv/vdm.c - * PURPOSE: Virtual DOS Machines Management + * PURPOSE: Virtual DOS Machines (VDM) Support * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr) */ From 8925f44f91c82ecd26bb428e7c161611412b957c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 19 Aug 2013 18:11:47 +0000 Subject: [PATCH 67/68] [GLU32] - Lee Schroeder: Add version information. CORE-7392 #resolve #comment Thanks. svn path=/trunk/; revision=59780 --- reactos/dll/opengl/glu32/CMakeLists.txt | 1 + reactos/dll/opengl/glu32/glu32.rc | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 reactos/dll/opengl/glu32/glu32.rc diff --git a/reactos/dll/opengl/glu32/CMakeLists.txt b/reactos/dll/opengl/glu32/CMakeLists.txt index 8df5de4b718..99a8fa3c874 100644 --- a/reactos/dll/opengl/glu32/CMakeLists.txt +++ b/reactos/dll/opengl/glu32/CMakeLists.txt @@ -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/reactos/dll/opengl/glu32/glu32.rc b/reactos/dll/opengl/glu32/glu32.rc new file mode 100644 index 00000000000..6c183eb5421 --- /dev/null +++ b/reactos/dll/opengl/glu32/glu32.rc @@ -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 From 7e36ed9fa81f1e7daba8c4ed90a3b27dc9efc0e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 19 Aug 2013 18:14:43 +0000 Subject: [PATCH 68/68] Rename CSR_CONNECTION_INFO and CONSOLE_CONNECTION_INFO to the same way as BASESRV_API_CONNECTINFO svn path=/trunk/; revision=59781 --- reactos/dll/ntdll/csr/connect.c | 4 ++-- reactos/dll/win32/kernel32/client/console/init.c | 2 +- reactos/include/reactos/subsys/csr/csrmsg.h | 8 ++++---- reactos/include/reactos/subsys/win/basemsg.h | 2 +- reactos/include/reactos/subsys/win/conmsg.h | 4 ++-- reactos/subsystems/win32/csrsrv/api.c | 6 +++--- reactos/subsystems/win32/csrsrv/api.h | 2 +- reactos/subsystems/win32/csrsrv/server.c | 2 +- reactos/win32ss/user/winsrv/consrv/init.c | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/reactos/dll/ntdll/csr/connect.c b/reactos/dll/ntdll/csr/connect.c index 163eecbc9dd..bf89f9057f2 100644 --- a/reactos/dll/ntdll/csr/connect.c +++ b/reactos/dll/ntdll/csr/connect.c @@ -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); diff --git a/reactos/dll/win32/kernel32/client/console/init.c b/reactos/dll/win32/kernel32/client/console/init.c index a8735ae85f3..55e8d645bc2 100644 --- a/reactos/dll/win32/kernel32/client/console/init.c +++ b/reactos/dll/win32/kernel32/client/console/init.c @@ -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); diff --git a/reactos/include/reactos/subsys/csr/csrmsg.h b/reactos/include/reactos/subsys/csr/csrmsg.h index a7d08cf2d7d..4d0be5f6982 100644 --- a/reactos/include/reactos/subsys/csr/csrmsg.h +++ b/reactos/include/reactos/subsys/csr/csrmsg.h @@ -44,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; @@ -55,12 +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 @@ -102,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; diff --git a/reactos/include/reactos/subsys/win/basemsg.h b/reactos/include/reactos/subsys/win/basemsg.h index 8f4c5e4667b..2b77d74bf0a 100644 --- a/reactos/include/reactos/subsys/win/basemsg.h +++ b/reactos/include/reactos/subsys/win/basemsg.h @@ -53,7 +53,7 @@ typedef enum _BASESRV_API_NUMBER } BASESRV_API_NUMBER, *PBASESRV_API_NUMBER; -typedef struct +typedef struct _BASESRV_API_CONNECTINFO { ULONG ExpectedVersion; HANDLE DefaultObjectDirectory; diff --git a/reactos/include/reactos/subsys/win/conmsg.h b/reactos/include/reactos/subsys/win/conmsg.h index 08671639773..bebd8ec1fe2 100644 --- a/reactos/include/reactos/subsys/win/conmsg.h +++ b/reactos/include/reactos/subsys/win/conmsg.h @@ -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 diff --git a/reactos/subsystems/win32/csrsrv/api.c b/reactos/subsystems/win32/csrsrv/api.c index d56b50d4038..123f302be6a 100644 --- a/reactos/subsystems/win32/csrsrv/api.c +++ b/reactos/subsystems/win32/csrsrv/api.c @@ -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)) diff --git a/reactos/subsystems/win32/csrsrv/api.h b/reactos/subsystems/win32/csrsrv/api.h index 60385d9c4ff..e03cc89089f 100644 --- a/reactos/subsystems/win32/csrsrv/api.h +++ b/reactos/subsystems/win32/csrsrv/api.h @@ -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 diff --git a/reactos/subsystems/win32/csrsrv/server.c b/reactos/subsystems/win32/csrsrv/server.c index 15d2e59c8a9..668a0f465e3 100644 --- a/reactos/subsystems/win32/csrsrv/server.c +++ b/reactos/subsystems/win32/csrsrv/server.c @@ -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; diff --git a/reactos/win32ss/user/winsrv/consrv/init.c b/reactos/win32ss/user/winsrv/consrv/init.c index a1ba2357a99..e2ee993dc36 100644 --- a/reactos/win32ss/user/winsrv/consrv/init.c +++ b/reactos/win32ss/user/winsrv/consrv/init.c @@ -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;