Archive

Archive for May, 2015

Changes in the Windows 10 SDK compared to Windows 8.1 (Part Two)

May 24, 2015 Comments off

This is a follow up to the first part of my blog post which compares the Windows 10 SDK to Windows 8.1

This section part will concentrate on the “um” folder differences.

Ok, let’s dive into the changes:

· “um\alljoyn” and “um\qcc” folders: Seems to be a set of header files related to Windows support for IoT. See http://en.wikipedia.org/wiki/AllJoyn for further details

· A lot of the header files have been updated to keep up to date with the latest SAL annotation improvements and to suppress compiler warnings. Also some of the headers have references to the new Partitions concept

· activedbg.h/idl: New BREAKREASON_MUTATION_BREAKPOINT enum value which refers to a new Mutation Breakpoint? and DEBUG_TEXT_ISNONUSERCODE define which indicates script is not a user code, such as library/tools code.

· activedbg100.h/idl: New enums and two new interfaces of IScriptInvocationContext, and IDebugStackFrame110

· activprof.h/idl: New enums and structs

· ActivScp.h/idl: New SCRIPTTEXT_ISNONUSERCODE enum

· Alink.h: Header file has been removed. It defined a number of COM interfaces to support .NET and has been moved rather than deleted

· Amsi.h/idl: New header file which supports Windows 10 AntiMalware Scan Interface functionality

· asmparse.grammer: Header file has been removed

· Audioclient.h/idl: New enums and new IAudioClient3 interface

· audioenginebaseapo.h/idl: New APO_FLAG_MIXER enum value

· AudioEngineEndpoint.h: New enums, new IAudioEndpointReleaseBufferControl interface and new DEVPKEY_AudioEndpointPlugin_* PROPERTYKEY defines

· AudioSessionType.h: Quite a few new AudioCategories. Various AudioCategories have been deprecated

· aviriff.h: New TIMECODE_SAMPLE structure

· bemapiset.h: Header file has been removed.

· BitsMsg.h: New Message Ids for BITS

· Bthledef.h: Value for GUID_BLUETOOTHLE_DEVICE_INTERFACE has changed

· cellularapi_oem.h\idl: New header file which supports Cellular COM API even though it is deprecated in Windows 10. This is probably new because of integration between Windows 10 and Windows 10 Mobile.

· CertCli.h: Various new CR_* and FR_* defines

· Certenroll.h: New XCN_CRYPT_STRING_*, XCN_NCRYPT_UI_*, XCN_CERT_* values some of which are to support new features in Windows Biometrics in Windows 10 such as the new face detection authentication mechanisms. New X509HardwareKeyUsageFlags, X509KeyParametersExportType, KeyAttestationClaimType, X509SCEPProcessMessageFlags, DelayRetryAction & ImportPFXFlags enums. New IX509PrivateKey2, IX509CertificateRequestPkcs10V4, ICertificateAttestationChallenge2, IX509SCEPEnrollment2, & IX509SCEPEnrollmentHelper interfaces. New ImportPFXToProviderFreeData API

· CertPol.h: New enum values

· CertSrv.h: New versioning defines for Windows 10 aka Threshold. New wszINFKEY*, wszPROP* & wszREG* defines

· Cfgmgr32.h: New CM_DISABLE_*, CM_SETUP_* defines.

· chakrart.h: New header file to allow the Microsoft Javascript engine called Chakra to be hosted by client applications other than Internet Explorer. This applies to both Windows 8.1 IE 11 and Windows Edge versions of JavaScript. See http://blogs.windows.com/msedgedev/2015/05/18/using-chakra-for-scripting-applications-across-windows-10/ for further information.

· clrdata.h/idl: Another header file which has been removed which supports .NET

· ClusApi.h: Has been reworked quite a bit to support new clustering functionality in Windows 10 / Windows 2016.

· codecapi.h: Various new STATIC_CODECAPI_* and DEFINE_CODECAPI_GUID defines. Various other new enums.

· combaseapi.h: A new REGCLA value called REGCLS_AGILE.

· coml2api.h: New header file which has been refactored from the existing storage.h and objbase.h header files.

· CompPkgSup.h: New RegisterServerForPMP, UnregisterServerForPMP & GetServerForPMP APIs. This seems to be new Windows 10 function to allow COM components to take part in Protect Media Path.

· cor.h, cordebug.h/idl, CorError.h, CorHdr.h, corhlpr.h, corprof.h/idl, corpub.h/idl & corsym.h/idl: All of these header files have been removed. They are all the native mode COM interface to .NET.

· credentialprovider.h/idl: New ICredentialProviderCredential3, ICredentialProviderCredentialEvents3 & ICredentialProviderUserArray2 interfaces. Part of the new Windows Biometrics enhancements in Windows 10.

· d2d1_3.h: New header file which supports new Windows 10 D2D features

· d2d1_3helper.h: New header file which supports new Windows 10 D2D features

· d2d1effectauthor.h: New D2D1_APPEND_ALIGNED_ELEMENT define

· d2d1effectauthor_1.h/hlsli: New header file which supports new Windows 10 D2D features

· d2d1effects_2.h: New header file which supports new Windows 10 D2D Effects features

· d2d10shader.h: New D3D10_ENABLE_UNBOUNDED_DESCRIPTOR_TABLES define

· d3d11_.h: New D3D11_DRAW_INSTANCED_INDIRECT_ARGS, D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS & D3D11_FEATURE_DATA_D3D11_OPTIONS2 & D3D11_FEATURE_DATA_D3D11_OPTIONS3 structs. New D3D11_RESOURCE_MISC_HW_PROTECTED, D3D11_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY, D3D11_FEATURE_D3D11_OPTIONS2, D3D11_FEATURE_D3D11_OPTIONS3, D3D11_TILED_RESOURCES_TIER_3, D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_MIRROR, D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_SHADER_USAGE & D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_* enum values. New D3D11_CONSERVATIVE_RASTERIZATION_TIER enum.

· d3d11_1.h: Various new D3D11_VIDEO_DECODER* structs & enums. New ID3D11VideoContext1, ID3D11VideoDevice1 and ID3D11VideoProcessorEnumerator1 interfaces

· d3d11_3.h/idl: A new header file for D3d v11. New interfaces include ID3D11Texture2D1, ID3D11Texture3D1, ID3D11RasterizerState2, ID3D11ShaderResourceView1, ID3D11RenderTargetView1, ID3D11UnorderedAccessView1, ID3D11Query1, ID3D11DeviceContext3 & ID3D11Device3

· d3d11on12.h/idl: A new header file for Direct3d 11 on 12. New APIs include D3D11On12CreateDevice. New interface ID3D11On12Device.

· d3d11sdklayers.h/idl: New D3D11_RLDO_IGNORE_INTERNAL enum value. Various new D3D11_MESSAGE_ID_* defines.

· D3d11shader.h: Removal of the D3D_PARAMETER_FLAGS enum.

· d3d12.h/idl, d3212sdklayers.h/idl, d3d12shader.h: New header files for Direct3D v12 which will debut with Windows 10

· d3dcommon.h/idl: New enum values to identify D3D v12.x. New D3D_PRIMITIVE_* & D3D_NAME_* defines. Existing D3D_PARAMETER_FLAGS enum has been moved to this header

· d3dcompiler.h/idl: New D3DCOMPILE_ENABLE_UNBOUNDED_DESCRIPTOR_TABLES define.

· datetimeapi.h: Declaration of existing GetDurationFormatEx API has been moved to this header.

· DbgEng.h: New DEBUG_REQUEST_TL_INSTRUMENTATION_AWARE, DEBUG_FORMAT_USER_SMALL_ADD_AVX_XSTATE_CONTEXT, DEBUG_EXECUTE_*, DEBUG_HANDLE_DATA_TYPE_MINI_SEMAPHORE_1, DEBUG_CSS_COLLAPSE_CHILDREN, DEBUG_SCOPE_GROUP_BY_DATAMODEL & DEBUG_SCOPE_GROUP_VALID_FLAGS defines. New DEBUG_PROCESSOR_IDENTIFICATION_ARM64 struct. Again this signals that Windows will be running on ARM64 chips in the very near future

· DbgHelp.h: New IMAGEHLP_HD_TYPE, IMAGEHLP_SF_TYPE enums. Existing functionality which was in this header file has been refactored into a new mindumpapiset.h header file

· DbgProp.h: New DBGPROP_ATTRIB_VALUE_PENDING_MUTATION enum value.

· dcomp.h: Includes new Direct Composition functionality released in Windows 8.1

· debugapi.h: New WaitForDebugEventEx API. I could find no online references to this new API. Also the API signature looks identical to the existing WaitForDebugEvent API

· DeviceCategories.h: New DEVICEDISPLAY_CATEGORY_MULTIMEDIA_APPLICATIONLAUNCHER_DIAL & DEVICEDISPLAY_CATEGORY_GAMING_DEVICES* defines.

· dhcpsapi.h: New ERROR_DHCP_NAP_NOT_SUPPORTED define.

· directionmanipulation.h/idl: New DIRECTMANIPULATION_VIEWPORT_OPTIONS_DISABLEPIXELSNAPPING define. Addition of a number of new IDirectManipulation* interfaces which cover new Direct Manipulation functionality in Windows 10.

· DirectXMath.h: More references to ARM64

· Dpx1.h/idl: New DPX_* defines. New DpxContainerDecryptionData struct. New DPX_CONTAINER_ENCRYPTION_ENUM enum. Addition of a number of new IDpx* interfaces. I could find no online references to these new interfaces.

· DSGetDC.h: New DS_DIRECTORY_SERVICE_10_REQUIRED and DS_DS_10_FLAG defines.

· dwrite.h: new DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME & DWRITE_LINE_SPACING_METHOD_PROPORTIONAL enum values.

· dwrite_3.h: A new header file for new DirectWrite features on Windows 10. 10 New IDWriteFont* interfaces have been added

· dxgiddi.h: Covers new functionality in WDDM 2.0 for Windows 10.

· DXGDIMessages.h: New DXGI_MSG_* enum values

· eappapis.h: New EapHostPeerGetDataToUnplumbCredentials API.

· emptyvc.h: New EVCF_USERCONSENTOBTAINED define.

· errhandlingapi.h: New RaiseFailFastException, FatalAppExitA/W, TerminateProcessOnMemoryExhaustion APIs. The TerminateProcessOnMemoryExhaustion is the only new API added on Windows 10 while the other API’s have been available on earlier versions of Windows and just the declarations of these API’s have been moved to this header file

· esent.h: JET_VERSION define value has been updated for Windows 10. New JET_* defines

· evntcons.h: New EVENT_HEADER_EXT_TYPE_EVENT_KEY, EVENT_HEADER_PROPERTY_RELOGGABLE & EVENT_ENABLE_PROPERTY_EVENT_KEY defines. New EVENT_EXTENDED_ITEM_EVENT_KEY struct.

· ExDisp.h/idl: New IShellUIHelper7 interface. New nav* enum values. This new interface exposes new functionality for the external object in Internet Explorer.

· ExDispid.h: DISPID_NEWTABCREATED define has been removed. New DISPID_* defines. Again this is new functionality for the external object in Internet Explorer.

· FhErrors.h: New error codes for File History.

· FhSvcCtrl.h: New FhBackupStopReason enum

· filterpipeline.h: New e XPS_FP_PRINTDEVICECAPABILITIES define.

· fusion.h: Header file has been removed. It’s a COM interface which supports Fusion/.NET and has been moved rather than deleted

· fwpmu.h: New FWPM_SUBLAYER_IPSEC_SECURITY_REALM define

· fwpsu.h: New FWPS_FIELD_INBOUND_TRANSPORT_V4_IPSEC_SECURITY_REALM_ID, FWPS_FIELD_* enum values. It covers new functionality exposed by the Windows Filtering Platform.

· gchost.h/idl: Header files have been removed. It defined a number of COM interfaces to support .NET garbage collector

· handleapi.h: New CompareObjectHandles API. I could find no online references to this new API.

· heapapi.h: Various API declarations have been decorated to work with the Memory Diagnostics tools in VC 2015. Check out http://blogs.msdn.com/b/vcblog/archive/2014/06/04/native-memory-diagnostic-tools-for-visual-studio-14-ctp1.aspx

· hrtfapoapi.h: New header file which supports HRTF functionality.

· http.h: New HTTP_REQUEST_TOKEN_BINDING_INFO, HTTP_SSL_PROTOCOL_INFO structs. New HttpRequestInfoTypeSslProtocol and HttpRequestInfoTypeSslTokenBinding enum values. New HTTP_REQUEST_FLAG_HTTP2 and HTTP_SERVICE_CONFIG_SSL_FLAG_REJECT defines. These changes indicate that the HTTP Server API now supports HTTP v2.0.

· httpserv.h: New IHttpResponse3 interface to support SPDY/3 and HTTP/2.0 Push-Promise functionality in IIS. New IHttpContext4 interface. The comments in the code around this new interface currently refer to Windows 9. This will probably be fixed up for RTM. This new interface supports getting timestamps as a 64 bit integer.

· ICeeFileGen.h: Another .NET header file which has been moved.

· IE12Plugin.h: A new header file which exposes new functionality in IE12 and the Edge Browser

· IEAutomation.h/idl: New enum value of to identify the Edge Browser

· IEMapi.h: New IELAUNCHOPTION_FLAGS enum values for the Edge Browser

· imageHlp.h: existing functionality in this header file has been refactored into a new minidumpapiset.h header file.

· imepad.h: New IPACID_CHARLIST define

· inkrenderer.h/idl/inkrenderer_i.c: New files which supports new Windows 10 D2D features

· isolation.h: Another .NET header file which has been moved.

· ivalidator.h/idl: Another .NET header file which has been moved.

· ivehandler.h/idl: Another .NET header file which has been moved.

· jsrt.h: New Header file to allow the Microsoft Javascript engine called Chakra to be hosted by client applications other than Internet Explorer. See http://blogs.windows.com/msedgedev/2015/05/18/using-chakra-for-scripting-applications-across-windows-10/ for further information.

· Jsrt9.h: New Header file to allow the Microsoft Javascript engine called Chakra to be hosted by client applications other than Internet Explorer. See http://blogs.windows.com/msedgedev/2015/05/18/using-chakra-for-scripting-applications-across-windows-10/ for further information.

· KnownFolder.h: New defines for FOLDERID_StartMenuAllPrograms, FOLDERID_OneDrive, FOLDERID_CameraRollLibrary, FOLDERID_SavedPictures, FOLDERID_SavedPicturesLibrary, FOLDERID_RetailDemo, FOLDERID_DevelopmentFiles, FOLDERID_Objects3D, FOLDERID_AppCaptures, FOLDERID_LocalDocuments, FOLDERID_LocalPictures, FOLDERID_LocalVideos, FOLDERID_LocalMusic & FOLDERID_LocalDownloads

· LMAccess.h: New NETLOGON_CONTROL_QUERY_ENC_TYPES define

· LMDFS.h: New FSCTL_DFS_GET_PKT_ENTRY_STATE define. New DFS_GET_PKT_ENTRY_STATE_ARG struct.

· Locationapi.h: ICivicAddressReport, IDefaultLocation, IDispLatLongReport, IDispCivicAddressReport, ILatLongReport, ILocation, ILocationEvents, ILocationPower & ILocationReport interfaces have been deprecated for Windows 10.

· macamd64.inc: AM64 assembler file has been removed

· MDMRegistration.h: New error code defines for Windows MDM

· memoryapi.h: New SetProcessValidCallTargets API. This seems to be a programmatic way to access the new Control Flow Guard functionality built into the VC 2015 compiler. New VirtualAllocFromApp, VirtualProtectFromApp, OpenFileMappingFromApp APIs. There is also new inline code in this header file to redirect certain Win32 API calls to the new APIs documented above depending on certain pre-processor values.

· metahost.h: Another .NET header file which has been moved.

· mfapi.h: New MF_*_BYTE_ALIGNMENT defines. New MFSampleExtension*, MFT_ENUM_FLAG_SORTANDFILTER_WEB_ONLY_EDGEMODE, MFVideoFormat_*, MFAudioFormat_*, MFSubtitleFormat_*, MF_MT_* & MF_DISABLE_FRAME_CORRUPTION_INFO defines.

· mfcaptureengine.h/idl: New MF_CAPTURE_ENGINE_* defines. New IMFCapturePhotoConfirmation interface. This work seems to be part of the enhancements to Windows Biometrics.

· Mferror.h: New MF_E_HARDWARE_DRM_UNSUPPORTED define

· mfidl.h/idl: New MFPMPSESSION_IN_PROCESS, MF_RESOLUTION_PLUGIN_CONTROL_POLICY_WEB_ONLY_EDGEMODE, SAMPLE_PROTECTION_VERSION_AES128CTR enum values. New MFPKEY_HTTP_ByteStream_Caching_Mode, MFPKEY_HTTP_ByteStream_Cache_Limit, MF_*, MFPROTECTION_* & MFTranscodeContainerType_FLAC defines. New MF_TRANSFER_VIDEO_FRAME_FLAGS enum. New IMFVideoSampleAllocatorNotifyEx, IMFVideoProcessorControl2, IMFContentProtectionDevice & IMFContentDecryptorContext interfaces. New MFCONTENTPROTECTIONDEVICE_INPUT_DATA, MFCONTENTPROTECTIONDEVICE_OUTPUT_DATA & MFCONTENTPROTECTIONDEVICE_REALTIMECLIENT_DATA structs. There is also new defines for a number of Microsoft Encoders / Decoders including H265 which might suggest that this will be released in some way for Windows 10. Again all this work seems to be part of the enhancements to Windows Biometrics and Media Foundation.

· mfmmediaengine.h/idl: Many new interfaces, enums, enum values and defines for Media Foundation.

· mfobjects.h: New MFVideoTransFunc_*, MFVideoPrimaries_*, MFVideoTransferMatrix_*, METransformInputStreamStateChanged, MF_PLUGIN_CONTROL_POLICY_USE_WEB_PLUGINS_EDGEMODE & MEDeviceThermalStateChanged enum values.

· mfreadwrite.h/idl: Many new interfaces, enums, enum values and defines for Media Foundation.

· mfsharingengine.h/idl: New MF_SHARING_ENGINE_EVENT_ERROR enum value. New MF_* defines.

· mftransform.h/idl: New MFT_MESSAGE_NOTIFY_RELEASE_RESOURCES & MFT_MESSAGE_NOTIFY_REACQUIRE_RESOURCES enum values. New MFT_END_STREAMING_AWARE, MF_SA_D3D11_* & MFT_DECODER_QUALITY_MANAGEMENT_* defines.

· mi.h: New MI_RESULT_TYPE_ERRNO MI_T define. New “NewClass” function pointer. New MI_Application_NewClass API.

· Mindumpapiset.h: Newly refactored header file which contains MiniDump from the Debug Help Library

· minschannel.h: New SECPKG_ATTR_KEYING_MATERIAL_INFO, SECPKG_ATTR_KEYING_MATERIAL & SECPKG_ATTR_SRTP_PARAMETERS defines.

· mmdeviceapi.h/idl: New PKEY_AudioEndpoint* defines.

· Mprapi.h: New RAS_PORT_2, L2TP_TUNNEL_CONFIG_PARAMS2, ROUTER_IKEv2_IF_CUSTOM_CONFIG2, MPR_IF_CUSTOMINFOEX2 & IKEV2_TUNNEL_CONFIG_PARAMS4 structs.

· MSAJTransport.h: New header file for AllJoyn. See http://en.wikipedia.org/wiki/AllJoyn for further details

· MSClus.h: Has been reworked quite a bit to support new clustering functionality in Windows 10 / Windows 2016.

· mscoreee.h: Another .NET header file which has been moved.

· msdelta.h: More references to ARM64. One of the comments even refers to ARM64 Portable Executable files with CLI4 transform.

· msft_*.mof: Quite a few new CIM classes and additions to existing ones.

· MsHtmcid.h: New IDM_FORWARDDELETE, IDM_INSERTHTML, IDM_SHAREPICTURE, IDM_ENABLE_OBJECT_RESIZING, IDM_INSERTTEXT, IDM_SAVEPDF, IDM_SETPOINTERLOCKCONSENT & IDM_GETPRINTMANAGERDOCSOURCEASYNC defines. Some of these enums indicate new functionality which may be available with the Edge Browser.

· Mshtmdid.h: New DISPID_ONCOMPASSNEEDSCALIBRATION, DISPID_A_WEBKIT_*, DISPID_A_MEDIAWEBKIT*, DISPID_EVPROP_*, DISPID_IHTMLCSSSTYLEDECLARATION4_WEBKIT, DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH, DISPID_IHTMLPLUGINSCOLLECTION_LENGTH, DISPID_IHTMLPLUGINSCOLLECTION_REFRESH, DISPID_IHTMLPRIVATEWINDOWACCESSIBLE_GETACCESSIBLEOBJECT, DISPID_IHTMLPRIVATEDOCUMENT4_*, DISPID_IE9EVENTS_*, DISPID_IE9EVENTS_MSWEBVIEWCONTAINSFULLSCREENELEMENTCHANGED, DISPID_IE9EVENTS_ORIENTATIONCHANGE & DISPID_IE9EVENTS_COMPASSNEEDSCALIBRATION defines.

· MsHtmHst.h/idl: New CONTEXT_MENU_PDF define. New InitializeLocalHtmlEngine & UnitializeLocalHtmlEngine APIs.

· MsHTML.h/idl/Mshtmlc.h: New IHTMLCSSStyleDeclaration4 interface. New styleDisplayWebkitBox, styleDisplayWebkitInlineBox enum values. New styleWebkitBoxOrient, styleWebkitBoxDirection, styleWebkitBoxPack enums. New styleColumnSpanNotSet enum value. Some of the existing styleColumnSpan, stylePointerEvents and styleTransformStyle enum values have changed. New styleWebkitAppearance enum.

· Msi.h: New NTDDI_WINTHRESHOLD define with a value of 0x06040000. This may or may not need to be updated to 0x0A000000 for RTM

· MsiDefs.h: New NTDDI_WINTHRESHOLD define with a value of 0x06040000. This may or may not need to be updated to 0x0A000000 for RTM

· msssip.h: New MSSIP_FLAGS_MULTI_HASH, SPC_DIGEST_GENERATE_FLAG, SPC_DIGEST_SIGN_FLAG defines.

· mswmdm.h: New WMDM_FORMATCODE_MKV, WMDM_FORMATCODE_MKA & WMDM_FORMATCODE_MK3D defines.

· Nap*.h/idl: These 17 files have been removed as part of the deprecation of Network Access Protection.

· ncrypt.h: New NCRYPT_ECDSA_ALGORITHM, NCRYPT_ECDH_ALGORITHM, NCRYPTBUFFER_SSL_SESSION_HASH, NCRYPTBUFFER_*, NCRYPTBUFFER_ECC_*, NCRYPT_CLAIM_*, NCRYPT_ATTESTATION_FLAG, NCRYPT_AUTHORITY_KEY_FLAG, NCRYPT_PUBLIC_LENGTH_PROPERTY, NCRYPT_SIGNATURE_LENGTH_PROPERTY, NCRYPT_ECC_*, NCRYPT_PCP_PLATFORM_BINDING_PCRALGID_PROPERTY, NCRYPT_CHANGEPASSWORD_PROPERTY, NCRYPT_ALTERNATE_KEY_STORAGE_LOCATION_PROPERTY, NCRYPT_PIN_CACHE_* & NCRYPT_KEY_STORAGE_INTERFACE_VERSION* defines. New NCryptCreateClaim & NCryptVerifyClaim API. All told this looks like quite a lot of interesting new functionality in Cryptography Next Generation in Windows 10. I plan to update my CryptoWrappers classes at some stage to include this new functionality.

· ncryptoprotect.h: New NCRYPT_KEY_PROTECTION_ALGORITHM_LOCKEDCREDENTIALS define. New NCryptStreamOpenToUnprotectEx API and associated NCRYPT_PROTECT_STREAM_INFO_EX struct.

· ndr64types.h: NDR64_PROC_FLAGS, NDR64_RPC_FLAGS structs have new members.

· netfw.h/idl: New NetworkIsolationGetEnterpriseInfo, NetworkIsolationGetEnterpriseIdAsync & NetworkIsolationGetEnterpriseIdClose APIs

· NtDsAPI.h: New DS_BEHAVIOR_WINTHRESHOLD define with an interesting comment that this should be fixed when the final product name is available. I guess this define will become DS_BEHAVIOR_WIN2016. From the comment we can tell that as of Q1 2014 Windows Server 2016 was still being called by the codename “Threshold“. New GUID_KEYS_CONTAINER_W & GUID_PRIVILEGED_ACCESS_MANAGEMENT_OPTIONAL_FEATURE_* defines.

· NtLdap.h: New LDAP_SEARCH_HINT_REQUIRED_INDEX_OID, LDAP_SEARCH_HINT_REQUIRED_INDEX_OID_W, LDAP_SERVER_* defines.

· ntlsa.h: New SeAdtParmTypeMultiSzString, SeAdtParmTypeLogonIdEx, iLogon_Groups, iDetailedTracking_PnpActivity enum values. New LSA_LOOKUP_DISALLOW_CONNECTED_ACCOUNT_INTERNET_SID, LSA_LOOKUP_PREFER_INTERNET_NAMES & TRUST_ATTRIBUTE_PIM_TRUST defines.

· NTSecAPI.h: New Audit_DetailedTracking_PnpActivity & Audit_Logon_Groups defines. New SeAdtParmTypeMultiSzString & SeAdtParmTypeLogonIdEx enum values. New TRUST_ATTRIBUTE_PIM_TRUST define. New members to MSV1_0_PROTOCOL_MESSAGE_TYPE struct.

· NTSecPKG.h: New PRIMARY_CRED_INTERNET_USER, PRIMARY_CRED_PACKED_CRED, PRIMARY_CRED_ENTERPRISE_INTERNET_USER & SECPKG_STATE_CRED_ISOLATION_ENABLED defines.

· objbase.h: This header file has been refactored to use a new coml2api.h file.

· Objidl.h/idl: New COMBND_RESERVED*, COMGLB_RESERVED* & CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_* defines.

· ObjIdlbase.h/idl: New COMBND_RESERVED*, COMGLB_RESERVED* & CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_* defines

· Ole2.h: This header file has been refactored to use a new coml2api.h file.

· ondemandconnroutehelper.h: New GetInterfaceContextTableForHostName & FreeInterfaceContextTable APIs

· opcode.def: Another .NET header file which has been moved.

· openum.h: Another .NET header file which has been moved.

· opmapi.h: New OPM_HDCP_WITH_TYPE_ENFORCEMENT_PROTECTION_LEVEL enum. New OPM_PROTECTION_TYPE_HDCP_TYPE_ENFORCEMENT enum value.

· pacmanclientapi.h: New Header file. The interfaces may be for managing the Tiled UI on Windows Phone.

· pix.h/pix_win.h: New header files for PIX

· powrprof.h: New ACCESS_PROFILE enum value

· PrinterExtension.h/idl: New IPrinterScriptablePropertyBag2 interface.

· PrinterExtensionDispId.h: New DISPID_PRINTERSCRIPTABLEPROPERTYBAG_GETSTREAMASXML define.

· ProcessSnapshot.h: New PSS_OBJECT_TYPE_SEMAPHORE enum value. The PSS_HANDLE_ENTRY struct has been extended to contain additional members. It looks like there is some cleanup to be done in this header file prior to RTM

· processthreadapi.h: Has a comment in it which should be moved to documentation prior to RTM. New ProcessMemoryExhaustionInfo, ProcessAppMemoryInfo & ProcessInformationClassMax enum values.

· PropIdlBase.h/idl: New header files for the refactoring of the COM header files in the SDK

· propkey.h: New PKEY_* defines.

· propsys.h: New CLSID CLSID_InMemoryPropertyStoreMarshalByValue define.

· propvarutil.h: New InitVariantFromUnknown API. InitPropVariantFromString API implementation has been reworked.

· qmgr.h: BSTR_UserSize64, BSTR_UserMarshal64, BSTR_UserUnmarshal64, BSTR_UserFree64, VARIANT_UserSize64, VARIANT_UserMarshal64, VARIANT_UserUnmarshal64 & VARIANT_UserFree64 APIs have been removed.

· Ras.h: New RASEO2_IsAlwaysOn & RASEO2_IsPrivateNetwork defines.

· Rdcentraldb.idl: New IRdDesktopAssignment interface. New CreateDesktopAssignment method in IRdMsDataHelper interface. New parameters to IRdMsDb::GetServer and IRdMsDb::EnumerateServers. Five new methods in the IRdMsDb interface. Since these changes are breaking changes in a COM interface plus the fact that I could not find any documentation on these interfaces it looks like these are private COM interfaces used by MS

· rdpencomapi.h/idl: New IRDPSRAPIFrameBuffer, IRDPSRAPITransportStreamBuffer, IRDPSRAPITransportStreamEvents, IRDPSRAPITransportStream, IRDPSRAPISharingSession2, IRDPViewerRenderingSurface, IRDPViewerInputSink, IRDPSRAPIAudioStream & IRDPSRAPIPerfCounterLoggingManager interfaces. It looks like there is quite a bit of new functionality in Windows Desktop Sharing in Windows 10.

· realtimeapiset.h: New QueryInterruptTimePrecise, QueryUnbiasedInterruptTimePrecise & QueryInterruptTime APIs.

· reason.h: New SHTDN_REASON_FLAG_MOBILE_UI_RESERVE define.

· Resapi.h: Has been reworked quite a bit to support new clustering functionality in Windows 10 / Windows 2016.

· ResourceIndexer.h: New header file with CreateResourceIndexer, DestroyResourceIndexer, IndexFilePath & DestroyIndexedResults APIs

· Routprot.h: ValidateRouteEx function pointer parameters have changed

· rtlsupportapi.h: More references to ARM64

· RTWorkQ.h: New RtwqSetDeadline & RtwqCancelDeadline APIs

· schannel.h: New SecPkgContext_KeyingMaterialInfo, SecPkgContext_KeyingMaterial & SecPkgContext_SrtpParameters structs. These structs extend SChannel SSPI to expose SRTP attributes.

· sdoias.h/idl: New SYSTEM_TYPE_NT6_2_WORKSTATION, SYSTEM_TYPE_NT6_3_WORKSTATION, and SYSTEM_TYPE_NT10_1_WORKSTATION, SYSTEM_TYPE_NT6_1_SERVER, SYSTEM_TYPE_NT6_2_SERVER, SYSTEM_TYPE_NT6_3_SERVER & SYSTEM_TYPE_NT10_1_SERVER enum values. This header file is for Server Data Objects.

· sessdirpublictypes.h./idl: New TARGET_GRANT_ADMIN_PRIVILEGE, TARGET_INVALID, RD_FARM_* & VM_NOTIFY_STATUS_CANCELED defines. This header file is for Remote Desktop Virtualization API.

· shdispid.h: New DISPID_ENTERPRISEIDCHANGED define

· shellapi.h: SIID_MAX_ICONS enum value has changed to 178.

· ShellScalingApi.h: New SHELL_UI_COMPONENT enum. New GetDpiForShellUIComponent API. This seems to be some of the work to better support High DPI on Windows 10

· sherrors.h: New SHC_E_SHELL_COMPONENT_STARTUP_FAILURE define.

· ShDisp.h/idl: New IWebWizardHost2 interface.

· ShObjIdl.h /idl: New IVirtualDesktopManager, IAppActivationUIInfo interface. New CATINFO_*, SLR_* enum values. The IVirtualDesktopManager supports the new Virtual Desktops feature in Windows 10.

· shtypes.h: New SCALE_*_PERCENT enum values. This seems to be some of the work to better support High DPI on Windows 10

· SkyDriveSkynPartners.h\idl: The ILSCEvent2 interface has been removed.

· slpublic.h: New SL_INFO_KEY_BIOS_PKEY_DESCRIPTION define. New SL_GEN_STATE_OFFLINE enum value.

· SoftPub.h: New CONFIG_CI_ACTION_VERIFY define.

· spellcheck.h/idl: New ISpellChecker2 interface which supports removing a word from its dictionary.

· srpapi.h: New header file with SrpCreateThreadNetworkContext, SrpCloseThreadNetworkContext, SrpSetTokenEnterpriseId & SrpGetProcessFQBNAttributeValue APIs. The interfaces may be for Software Restriction Policy improvements on Windows 10 Enterprise.

· storagewmi_provider.mof: Pulls in all the new msft_* mof files.

· StrongName.h: Another .NET header file which has been moved

· sysinfoapi.h: New GetOsManufacturingMode and GetIntegratedDisplaySize APIs

· SystemMediaTransportControlsInterop.h/idl: New files with ISystemMediaTransportControlsInterop interface.

· taskschd.h: New TASK_COMPATIBILITY_V2_3 enum value. This enum value indicates that the Task Scheduler v2.3 is what windows 10 will be.

· tdh.h: New PropertyHasCustomSchema enum value. EVENT_PROPERTY_INFO struct has new customSchemaType substruct.

· TextServ.h: New TXTBIT_FLASHLASTPASSWORDCHAR & TXTBIT_ADVANCEDINPUT defines.

· TextStor.h: New TS_SD_INPUTPANEMANUALDISPLAYENABLE define.

· TimeProv.h: Removed wszW32TimeRegValueRunOnVirtualOnly define

· tlbref.h/idl: Another set of .NET headers which has been moved.

· tokenbinding.h: New header file with support for the Token Binding protocol.

· tpmvscattestation.h/idl: New header files with new TPMVSC_ATTESTATION_TYPE enum

· tpmvscmgr.h/idl: New ITpmVirtualSmartCardManager3 interface to support creation of scard cards in a TPM with Attestation.

· TxDtc.h: New IResourceManagerRejoinable interface for Distributed Transaction Coordinator.

· UIAutomationClient.h/idl: New UIA_*, AnnotationType_* defines. New IUIAutomationCustomNavigationPattern & IUIAutomationElement4 interfaces for UI Automation.

· UIAutomationCore.h/idl: New ICustomNavigationProvider for UI Automation.

· UIAutomationCoreApi.h: New IsCustomNavigationPatternAvailable_Property_GUID, PositionInSet_Property_GUID, SizeOfSet_Property_GUID, Level_Property_GUID, AnnotationTypes_Property_GUID, AnnotationObjects_Property_GUID, Value_Value_Property_GUID & CustomNavigation_Pattern_GUID defines. New CustomNavigationPattern_Navigate API.

· UIViewSettingsInterop.h/idl: New header files with IUIViewSettingsInterop interface.

· upnphost.h/idl: New IUPnPDeviceControlHttpHeaders interface.

· urlmon.h/idl: New IZoneIdentifier2 interface. New CLSID_TBAuthProtocol, FMFD_RESERVED_1, CFSTR_MIME_X_MIXED_REPLACE, CFSTR_MIME_X_JAVASCRIPT, CFSTR_MIME_TEXT_JSON, CFSTR_MIME_APPLICATION_JAVASCRIPT, INET_E_*, BINDSTATUS_SSLUX_HSTSFATALERROR, BINDSTRING_ENTERPRISE_ID, FEATURE_ALLOW_HSTS_SECURITY_ERROR & FEATURE_FORCE_HSTS_POLICY defines. This header file maps to new functionality in URL Security Zone Identifiers.

· UserEnv.h: Removal of PT_ROAMING_PREEXISTING define.

· utilapiset.h: New EncodeRemotePointer & DecodeRemotePointer APIs.

· uusbfn.h: New header file which simply includes other existing header files.

· vdserr.h: New VDS_E_* defines.

· Vdssys.h: Has been reworked quite a bit to support new Virtual Disk functionality in Windows 10 / Windows 2016. For example VHD Snapshots now seem to be supported via a new TakeSnapshotVhdSet API.

· VerError.h: Another .NET header file which has been moved

· VersionHelpers.h: New IsWindowsThresholdOrGreater & IsWindows10OrGreater APIs.

· virtdisk.h: Has been reworked quite a bit to support new Virtual Disk functionality in Windows 10 / Windows 2016.

· vsstyle.h: New WP_BORDER enum value

· vssym32.h: New TMT_* defines.

· wbcl.h: Has been reworked quite a bit to support new Trusted Platfom Module Base Services functionality in Windows 10 / Windows 2016.

· WcnDevice.h: New WCN_PASSWORD_TYPE_OOB_SPECIFIED enum value for Windows Connect Now.

· WcnTypes.h: New WCN_VALUE_* enum values for Windows Connect Now.

· WebAuthenticationCoreManagerInterop.h/idl: New header files with IWebAuthenticationCoreManagerInterop interface.

· WebServices.h: New WS_SECURITY_BEARER_KEY_TYPE_VERSION enum.

· WERAPI.h: New WER_FAULT_*, WER_SUBMIT_DISCARD_IF_QUEUED defines. New WerFileTypeEtlTrace, WerReportUploadedCab, WerStorageLocationNotFound enum value. New WER_REPORT_INFORMATION_V5 struct. This header file maps to new functionality in Windows Error Reporting.

· wheader.h: New WHEA_DISABLE_DUMMY_WRITE define.

· WinBase.h: GlobalAlloc, GlobalReAlloc, LocalAlloc, LocalReAlloc have been decorated to work with the Memory Diagnostics tools in VC 2015. Check out http://blogs.msdn.com/b/vcblog/archive/2014/06/04/native-memory-diagnostic-tools-for-visual-studio-14-ctp1.aspx. New EFS_DROP_ALTERNATE_STREAMS, ProcThreadAttributeJobList, PROCESS_CREATION_MITIGATION_POLICY_*, SYSTEM_STATUS_FLAG_POWER_SAVING_ON defines. New SystemStatusFlag member for SYSTEM_POWER_STATUS struct. New WTSGetServiceSessionId & WTSIsServerContainer APIs. These APIs could be the beginning of developer support for Docker Containers on Windows.

· winbase.inl: The various Isolation Aware functions have been refactored from this header file. For more information please see https://msdn.microsoft.com/en-us/library/aa375197.aspx

· WinBio.h: New substructs added to the WINBIO_ASYNC_RESULT struct. New WinBioEnrollSelect & WinBioMonitorPresence API. Has been reworked quite a bit to support new Windows Biometric functionality in Windows 10 / Windows 2016

· winbio_adapter.h: Has been reworked quite a bit to support new Windows Biometric functionality in Windows 10 / Windows 2016

· wincodec.h/idl: New IWICJpegFrameDecode and IWICJpegFrameEncode interface. New CLSID_WICJpegQualcommPhoneEncoder, WIC_JPEG_*, GUID_WICPixelFormat16bpp & WICBitmapInterpolationModeHighQualityCubic defines. New WICJpegIndexingOptions, WICJpegTransferMatrix & WICJpegScanType enums. New WICJpegFrameHeader & WICJpegScanHeader structs.

· wincrypt.h: new szOID_ECC_CURVE_*, X509_ECC_PARAMETERS, szOID_KP_PRIVACY_CA, szOID_ATTEST_WHQL_CRYPTO, szOID_KP_FLIGHT_SIGNING, szOID_PIN_RULES_*, szOID_EV_WHQL_CRYPTO, szOID_SITE_PIN_RULES_*, SITE_PIN_RULES_ALL_SUBDOMAINS_FLAG, szOID_RDN_TCG_PLATFORM_*, szOID_ENROLL_SCEP_*, szOID_ATTR_PLATFORM_SPECIFICATION, CRYPT_OID_USE_CURVE_NAME_FOR_ENCODE_FLAG, CRYPT_OID_USE_CURVE_PARAMETERS_FOR_ENCODE_FLAG, CMSG_SIGNED_DATA_NO_SIGN_FLAG, CERT_SCEP_GUID_PROP_ID, CERT_SERIALIZABLE_KEY_CONTEXT_PROP_ID, CERT_ISOLATED_KEY_PROP_ID, CERT_DISABLE_PIN_RULES_AUTO_UPDATE_VALUE_NAME, CERT_AUTO_UPDATE_SYNC_FROM_DIR_URL_VALUE_NAME, CERT_PIN_RULES_*, CRYPT_CREATE_NEW_CACHE_ENTRY, CRYPTNET_URL_CACHE_PRE_FETCH_PIN_RULES_CAB, CRYPT_RETRIEVE_MAX_ERROR_CONTENT_LENGTH, CERT_CHAIN_WEAK_FILE_HASH_AFTER_TIME_NAME, CERT_CHAIN_WEAK_TIMESTAMP_HASH_AFTER_TIME_NAME, CERT_CHAIN_DISABLE_*, CERT_CHAIN_AUTO_*, CERT_CHAIN_DISABLE_AUTO_FLUSH_PROCESS_NAME_LIST_VALUE_NAME, CERT_SRV_OCSP_RESP_*, CRYPTNET_CRL_PRE_FETCH_*, CERT_CHAIN_ONLY_ADDITIONAL_AND_AUTH_ROOT, CERT_CHAIN_FIND_BY_ISSUER, MICROSOFT_ROOT_CERT_CHAIN_POLICY_DISABLE_FLIGHT_ROOT_FLAG, CRYPT_STRING_BASE64URI, CRYPT_STRING_PERCENTESCAPE, PKCS12_ONLY_CERTIFICATES, PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES, PKCS12_ONLY_CERTIFICATES_PROVIDER_TYPE, PKCS12_ONLY_CERTIFICATES_PROVIDER_NAME, PKCS12_ONLY_CERTIFICATES_CONTAINER_NAME, PKCS12_DISABLE_ENCRYPT_CERTIFICATES, PKCS12_ENCRYPT_CERTIFICATES, PKCS12_EXPORT_ECC_CURVE_PARAMETERS, PKCS12_EXPORT_ECC_CURVE_OID, PKCS12_CONFIG_REGPATH, PKCS12_ENCRYPT_CERTIFICATES_VALUE_NAME, CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_READ_FLAG, CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_WRITE_FLAG, CERT_FILE_HASH_USE_TYPE & CERT_TIMESTAMP_HASH_USE_TYPE defines. CMSG_SIGNER_ENCODE_INFO struct has a new hBCryptKey member. CRYPT_RETRIEVE_AUX_INFO struct has two new members. New CERT_SERVER_OCSP_RESPONSE_OPEN_PARA struct. New PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK function callback. CertOpenServerOcspResponse API now has a new documented parameter. New CertIsWeakHash API. All told there looks like quite a bit of new functionality in the Cryptography APIs in Windows 10. Hopefully over the next few months I will get some time to update my CryptoWrappers classes to expose this new functionality.

· WinDNS.h: New DNS_CLASS_UNICAST_RESPONSE, DNS_RCLASS_UNICAST_RESPONSE, DNS_TYPE_TLSA, DNS_RTYPE_TLSA, DNS_TLSA_RECORD_LENGTH & DNS_UNKNOWN_RECORD_LENGTH defines. New DNS_TLSA_DATA & DNS_UNKNOWN_DATA structs. New DNS_TLSA_DATA and DNS_UNKNOWN_DATA members in the DNS_RECORDW/A structs.

· windows.devices.alljoyn.interop.h/idl: New header files for AllJoyn. See http://en.wikipedia.org/wiki/AllJoyn for further details

· windows.graphics.directx.direct3d11.interop.h: New header file with some helper methods for D3D on WinRT

· windows.graphics.imaging.interop.h/idl: New header files with new ISoftwareBitmapNative & ISoftwareBitmapNativeFactory interfaces for WinRT.

· Windows.h: More references to ARM64

· windows.media.core.interop.h/idl: New header files with new IAudioFrameNative, IVideoFrameNative, IAudioFrameNativeFactory & IVideoFrameNativeFactory interfaces.

· windows.ui.xaml.media.dxinterop.h/idl: New ISwapChainPanelNative2 inteface for WinRT.

· WindowsNumerics.h/inl: New header file and implementation file which supports C++ vector and matrix types. It is part of Win2D

· winefs.h: New EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR & EFS_IS_DESCRIPTOR_VERSION defines.

· wingdi.h: New DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE enum value. New DISPLAYCONFIG_DESKTOP_IMAGE_INFO & DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION structs. New DISPLAYCONFIG_DESKTOP_IMAGE_INFO sub-struct in DISPLAYCONFIG_MODE_INFO struct. New DISPLAYCONFIG_PATH_*, DISPLAYCONFIG_PATH_*, DISPLAYCONFIG_DEVICE_INFO_*, QDC_VIRTUAL_MODE_AWARE & SDC_VIRTUAL_MODE_AWARE defines. New sub-struct in DISPLAYCONFIG_PATH_SOURCE_INFO struct. New sub-struct in DISPLAYCONFIG_PATH_TARGET_INFO struct. New ScaleRgn, ScaleValues, GetDCDpiScaleValue & GetBitmapDpiScaleValue APIs. This seems to be some of the work to better support High DPI on Windows 10

· winhttp.h: New WINHTTP_OPTION_CONNECTION_FILTER & HTTP_STATUS_PERMANENT_REDIRECT defines.

· Wininet.h: New INTERNET_OPTION_COMPRESSED_CONTENT_LENGTH, INTERNET_OPTION_ENABLE_HTTP_PROTOCOL, INTERNET_OPTION_HTTP_PROTOCOL_USED, INTERNET_OPTION_HSTS, INTERNET_OPTION_ENTERPRISE_CONTEXT, INTERNET_OPTION_CONNECTION_FILTER, INTERNET_OPTION_REFERER_TOKEN_BINDING_HOSTNAME, HTTP_PROTOCOL_FLAG_HTTP2, HTTP_QUERY_HTTP2_SETTINGS, HTTP_QUERY_STRICT_TRANSPORT_SECURITY, HTTP_QUERY_TOKEN_BINDING, HTTP_QUERY_INCLUDE_REFERER_TOKEN_BINDING_ID, HTTP_STATUS_PERMANENT_REDIRECT, INTERNET_COOKIE_HOST_ONLY, INTERNET_COOKIE_APPLY_HOST_ONLY & ERROR_HTTP_HSTS_REDIRECT_REQUIRED defines. New HttpIsHostHstsEnabled API. These changes are part of adding HTTP/2 to Internet Explorer in Windows 10 and HTTP Strict Transport Security.

· Winineti.h: New INTERNET_OPTION_ENABLE_WBOEXT, INTERNET_OPTION_SET_IN_PRIVATE, INTERNET_OPTION_DOWNLOAD_MODE_HANDLE, INTERNET_OPTION_EDGE_COOKIES, CACHE_CONFIG_DISK_SPACE_* & CACHE_HEADER_DATA_HSTS_CHANGE_COUNT defines. New INTERNET_DOWNLOAD_MODE_HANDLE struct. COOKIE_ALLOWED_SET_FLAGS & COOKIE_ALLOWED_COOKIE_FLAGS defines have been updated. New UrlCacheFreeGlobalSpace, UrlCacheGetGlobalCacheSize, AppCacheCreateAndCommitFile & UrlCacheServer APIs.

· winioctl.h: The header file has been reworked quite a bit to support changes coming to Storage in Windows 10/2016.

· winmeta.h/xml: New WINEVENT_CHANNEL_TRACELOGGING & MSG_channel_TraceLogging define. WINEVENT_KEYWORD_WDI_CONTEXT & MSG_keyword_WDIContext defines have been removed.

· WinNls.h: New LOCALE_IDIALINGCODE define which returns a country code’s dialling prefix. New LOCALE_SAM, LOCALE_SPM, LOCALE_SSHORTESTAM, LOCALE_SSHORTESTPM, DATE_MONTHDAY, CAL_PERSIAN & GEO_DIALINGCODE defines.

· winnt.h: More references to ARM64. New Product_* defines. These additions were picked up by DtWinVer v1.96. New COMPILETIME_OR_6FLAGS, DBG_REPLY_LATER, DBG_PRINTEXCEPTION_WIDE_C, CONTEXT_KERNEL_DEBUGGER, SECURITY_SID_SIZE, SECURITY_INSTALLER_GROUP_CAPABILITY_BASE, SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT, SECURITY_INSTALLER_CAPABILITY_RID_COUNT, DOMAIN_USER_RID_DEFAULT_ACCOUNT, DOMAIN_GROUP_RID_KEY_ADMINS, DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS, DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT, DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS, SECURITY_CAPABILITY_APP_RID, SECURITY_CAPABILITY_APPOINTMENTS, SECURITY_CAPABILITY_CONTACTS, SECURITY_AUTHENTICATION_KEY_TRUST_RID, SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID, SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID, SE_ACTIVATE_AS_USER_CAPABILITY, SE_CONSTRAINED_IMPERSONATION_CAPABILITY, SE_SESSION_IMPERSONATION_CAPABILITY, SE_MUMA_CAPABILITY, TOKEN_USER_MAX_SIZE, TOKEN_OWNER_MAX_SIZE, TOKEN_INTEGRITY_LEVEL_MAX_SIZE, TOKEN_APPCONTAINER_SID_MAX_SIZE, JOB_OBJECT_LIMIT_VIOLATION_INFORMATION_VERSION_3, JOB_OBJECT_LIMIT_*, JOB_OBJECT_CPU_RATE_CONTROL_*, JOB_OBJECT_NET_RATE_CONTROL_*, JOB_OBJECT_IO_RATE_CONTROL_*, SILO_OBJECT_*, PF_ARM_V8_INSTRUCTIONS_AVAILABLE, PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE, PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE, PF_RDTSCP_INSTRUCTION_AVAILABLE, XSTATE_*, CFG_CALL_TARGET_INFO, MEMORY_PARTITION_*, PAGE_TARGETS_*, FILE_SUPPORTS_BLOCK_REFCOUNTING, FILE_SUPPORTS_SPARSE_VDL, IO_REPARSE_TAG_WCI, IO_QOS_MAX_RESERVATION, GUID_DEEP_SLEEP_ENABLED, GUID_DISK_MAX_POWER, GUID_POWER_SAVING_STATUS, GUID_ENERGY_SAVER_SUBGROUP, GUID_ENERGY_SAVER_BATTERY_THRESHOLD, POWERBUTTON_ACTION_INDEX_TURN_OFF_THE_DISPLAY, POWERBUTTON_ACTION_VALUE_TURN_OFF_THE_DISPLAY, PROCESSOR_THROTTLE_*, *PROCESSOR_PERF_*, GUID_PROCESSOR_PARKING_DISTRIBUTION_THRESHOLD, GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK, GUID_WIFI_IN_STANDBY, POWER_WIFI_IN_STANDBY_DISABLED, POWER_WIFI_IN_STANDBY_ENABLED, GUID_BATTERY_COUNT, DIAGNOSTIC_REASON_*, HIBERFILE_TYPE_*, IMAGE_FILE_MACHINE_ARM64, IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG, IMAGE_REL_ARM64_*, IMAGE_GUARD_*, IMAGE_DEBUG_TYPE_*, COMIMAGE_FLAGS_32BITPREFERRED, FAST_FAIL_*, DEVICEFAMILY*, REG_APP_HIVE_OPEN_READ_ONLY & SERVICE_USER* defines. XSAVE_AREA_HEADER struct has a new member. New InterlockedExchangeAdd8, InterlockedExchangeAddSizeT, InterlockedExchangeAddSizeTAcquire, InterlockedExchangeAddSizeTNoFence, InterlockedIncrementSizeT, InterlockedIncrementSizeTNoFence, InterlockedDecrementSizeT, InterlockedDecrementSizeTNoFence, ReadBooleanAcquire, ReadBooleanNoFence, WriteBooleanRelease, WriteBooleanNoFence, RtlOsDeploymentState, RtlGetDeviceFamilyInfoEnum, RtlConvertDeviceFamilyInfoToString & RtlSwitchedVVI APIs. New SE_SID, SE_TOKEN_USER, PROCESS_MITIGATION_FONT_DISABLE_POLICY, JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_EX, JOBOBJECT_LIMIT_VIOLATION_INFORMATION_EX, JOBOBJECT_NET_RATE_CONTROL_INFORMATION, JOBOBJECT_IO_RATE_CONTROL_INFORMATION, SILOOBJECT_BASIC_INFORMATION, SILOOBJECT_ROOT_DIRECTORY, SERVERSILO_STATE, SERVERSILO_BASIC_INFORMATION, HIBERFILE_BUCKET, IMAGE_LOAD_CONFIG_CODE_INTEGRITY, IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY, OS_DEPLOYEMENT_STATE_VALUES structs. New SidTypeLogonSession, TokenPrivateNameSpace, ProcessFontDisablePolicy, JobObject*, SharedVirtualDiskSnapshotsSupported, PowerActionDisplayOff, POWER_INFORMATION_LEVEL & MonitorRequestReason* enum values. New WELL_KNOWN_SID_TYPE enum values. New PSECURITY_ATTRIBUTES_OPAQUE member in TOKEN_ACCESS_INFORMATION struct. New sub-struct in JOBOBJECT_CPU_RATE_CONTROL_INFORMATION struct. New SILOOBJECTINFOCLASS & HIBERFILE_BUCKET_SIZE enums. New EfficiencyClass member in PROCESSOR_RELATIONSHIP struct. New members in XSTATE_CONFIGURATION struct. New GuardCFDispatchFunctionPointer & IMAGE_LOAD_CONFIG_CODE_INTEGRITY members in IMAGE_LOAD_CONFIG_DIRECTORY struct. Removed GUID_VIDEO_FULLSCREEN_PLAYBACK, GUID_AUDIO_PLAYBACK, GUID_CS_BATTERY_SAVER_THRESHOLD, GUID_CS_BATTERY_SAVER_ACTION & GUID_CS_BATTERY_SAVER_TIMEOUT defines. New members in SYSTEM_POWER_CAPABILITIES struct. This is probably the main header file in the Windows SDK and the biggest changes in it cover things such as ARM64 support, Control Flow Guard and the probable underlying OS changes in Job Objects and a new concept of SILOs to support Docker Containers. I will look to update DtWinVer in the near future to support the new DeviceFamily.

· winreg.h: New RRF_SUBKEY_WOW6464KEY, RRF_SUBKEY_WOW6432KEY, RRF_WOW64_MASK, SHUTDOWN_SOFT_REBOOT & SHUTDOWN_MOBILE_UI defines.

· winsafer.h: New SRP_POLICY_WLDPCONFIGCI define

· winsdkver.h: Changes to _WIN32_MAXVER, _WIN32_WINDOWS_MAXVER, NTDDI_MAXVER, _WIN32_WINNT_MAXVER & WINVER_MAXVER to 0x0A00 for Windows 10.

· winspool.h: New BIDI_ACTION_GET_WITH_ARGUMENT & ERROR_BIDI_* defines.

· winsvc.h: New SERVICE_ACCEPT_USER_LOGOFF, SERVICE_TRIGGER_TYPE_AGGREGATE & SC_AGGREGATE_STORAGE_KEY defines. I will look to update CNTService in the near future to support the new service related functionality.

· winternl.h: New RtlInitStringEx & RtlInitAnsiStringEx APIs. New OBJ_IGNORE_IMPERSONATED_DEVICEMAP define.

· WinUser.h: New VK_NAVIGATION_*, VK_GAMEPAD_*, POINTER_STRUCTURES, DPISM_*, SPI_GETPENVISUALIZATION, SPI_SETPENVISUALIZATION & PENVISUALIZATION_* defines. New USAGE_PROPERTIES, POINTER_TYPE_INFO & INPUT_INJECTION_VALUE structs. Removal of SPI_GETMOUSECORNERCLIPLENGTH & SPI_GETMOUSECORNERCLIPLENGTH defines. The VK_GAMEPAD_* defines are probably because of the XBOX integration for the Windows 10 release.

· winuser.inl: Changes to handle the Isolation Aware functions. For more information please see https://msdn.microsoft.com/en-us/library/aa375197.aspx

· winuser.rh: New VK_NAVIGATION_* & VK_GAMEPAD_* defines.

· wlanapi.h: New WLAN_REASON_CODE_HOTSPOT2_PROFILE_DENIED, WLAN_REASON_CODE_HOTSPOT2_PROFILE_NOT_ALLOWED, WLAN_AVAILABLE_NETWORK_*, GUID_AEPSERVICE_WIFIDIRECT_DEVICE, DEVPKEY_WiFiDirect* & DEVPKEY_WiFi_InterfaceGuid defines. New WLAN_AVAILABLE_NETWORK_V2, WLAN_AVAILABLE_NETWORK_LIST_V2 & WLAN_CONNECTION_PARAMETERS_V2 structs. New WLAN_OPERATIONAL_STATE enum. New wlan_notification_acm_operational_state_change enum value. New WlanGetAvailableNetworkList2 & WlanConnect2 APIs.

· wmcodecdsp.h: Various new Media Foundation codecs for H.263, H.265, ALaw, MULaw, Vorbis, FLAC, MSALAC, MSAMRNB & AMRNB

· wofapi.h: New header file which supports Windows Image Boot Files and the work in Windows 10 to reduce its on disk footprint.

· workspaceruntime.h/idl: New IWorkspace3 interface.

· WS2tcpip.h: Inline gai_strerrorA and gai_strerrorW have been reworked slightly.

· Wscapi.h: wscDisableExpiredEnableDefender API has been removed

· Wuerrror.h: New WU_E_* defines. WU_E_CALL_CANCELLED_BY_HIDE, WU_E_CALL_CANCELLED_BY_INVALID define has changed value. The WU_E_HARDWARECAPABILITY_PARTIAL_RESULT define has been removed. Some of these changes reflect the enhancements being added to Windows Update in Windows 10.

· xamlOM.h/idl: New header files with new IVisualTreeServiceCallback, IVisualTreeService, IXamlDiagnostics interfaces for WinRT XAML.

· xaudio2.h: New XAUDIO2D_DLL_A, XAUDIO2D_DLL_W, XAUDIO2D_DLL, XAUDIO2_DEBUG_ENGINE, XAUDIO2_STOP_ENGINE_WHEN_IDLE & XAUDIO2_1024_QUANTUM defines. This covers new functionality in XAudio 2.9.

· xaudio2fx.h: New SideDelay member in XAUDIO2FX_REVERB_PARAMETERS struct. New XAUDIO2FX_REVERB_MIN_7POINT1_SIDE_DELAY, XAUDIO2FX_REVERB_MIN_7POINT1_REAR_DELAY, XAUDIO2FX_REVERB_MAX_7POINT1_SIDE_DELAY, XAUDIO2FX_REVERB_MAX_7POINT1_REAR_DELAY, XAUDIO2FX_REVERB_DEFAULT_7POINT1_SIDE_DELAY, XAUDIO2FX_REVERB_DEFAULT_7POINT1_REAR_DELAY, ReverbConvertI3DL2ToNative ineline function has an additional parameter and has been reworked slightly. This covers new functionality in XAudio 2.9.

· xmllite.h/idl: New IXmlWriterLite interface.

· xpsrassvc.h: New IXpsRasterizationFactory2 interface.

It looks like there’s loads of very interesting stuff in Windows 10 for native mode C++ developers to dig into. Happy coding.

Categories: Programming

DtWinVer v1.96

May 17, 2015 Comments off

Just to let everyone know that v1.96 of DtWinVer has been released. Updates for this version include:

  • Updated all code references of Windows Server 10 to Windows Server 2016.
  • Added support for the following product types: PRODUCT_PROFESSIONAL_EMBEDDED, PRODUCT_MOBILE_CORE, PRODUCT_EMBEDDED_INDUSTRY_EVAL, PRODUCT_EMBEDDED_INDUSTRY_E_EVAL, PRODUCT_EMBEDDED_EVAL, PRODUCT_EMBEDDED_E_EVAL, PRODUCT_NANO_SERVER, PRODUCT_CLOUD_STORAGE_SERVER, PRODUCT_CORE_CONNECTED, PRODUCT_PROFESSIONAL_STUDENT, PRODUCT_CORE_CONNECTED_N, PRODUCT_PROFESSIONAL_STUDENT_N, PRODUCT_CORE_CONNECTED_SINGLELANGUAGE, PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC, PRODUCT_CONNECTED_CAR, PRODUCT_INDUSTRY_HANDHELD, PRODUCT_PPI_PRO, PRODUCT_ARM64_SERVER, PRODUCT_EDUCATION, PRODUCT_EDUCATION_N, PRODUCT_IOTUAP, PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER, PRODUCT_ENTERPRISE_S, PRODUCT_ENTERPRISE_S_N, PRODUCT_PROFESSIONAL_S, PRODUCT_PROFESSIONAL_S_N, PRODUCT_ENTERPRISE_S_EVALUATION & PRODUCT_ENTERPRISE_S_N_EVALUATION.
  • Remove the word Installed from most of the methods.
  • The download now includes a Winver14.sln solution for Visual Studio 2015 RC. This now allows you to build an ARM binary of DtWinVer which you can deploy to Windows IoT Core on the Raspberry Pi 2. Also included is a precompiled ARM binary of DtWinVer.
  • Updated the code to clean compile on VS 2015 RC
Categories: Web Site Updates

Changes in the Windows 10 SDK compared to Windows 8.1 (Part One)

May 15, 2015 2 comments

What follows is a review of the Windows 10 Headers files compared to Windows 8.1. By doing this comparison we should be able to highlight some of the key features and changes coming in Windows 10 for developers.

Please note that this review is based on the VS 2015 Release Candidate which was released at Build 2015 which took place from April 29th to May 1st. and as such you might expect some further changes at RTM time.

The new Windows 10 header files end up getting installed into c:\program files (x86)\Windows Kits\10\Include by default. Underneath this directory is two folders, one called “10.0.10056.0” and “10.0.10069.0”. The “10.0.10056.0” only includes just an “ucrt” folder which includes the new Universal C Runtime header files while the “10.0.10069.0” contain a full SDK install.  I am not sure why there is two “10.0.*” folders. The “10056” and “10069” seem to correspond to the build number of Windows 10. This review will concentrate on the “10.0.10069.0” which contain four folders, namely “shared”, “ucrt”, “um” and “winrt”.  As mentioned already the “ucrt” folder contains the new Universal CRT header files. The “winrt” folder contains the WinRT header files. Finally the “shared” and “um” folders contains what you would consider the traditional Windows SDK header files. Part one of this review will concentrate on the “shared” folder which contains the defines which are shared between Kernel mode and User mode. The upcoming second part of this blog post will look at the “um” folder differences which contain the user mode header files. I expect the second part will be much bigger as there are just under 2000 files in the “um” directory compared to just 246 in the “shared” directory as well as the fact you would expect that a lot of the new functionality will be visible as user mode APIs.

Ok, let’s dive into the changes:

  • “um\alljoyn” and “um\qcc” folders: Seems to be a set of header files related to Windows support for IoT. See http://en.wikipedia.org/wiki/AllJoyn for further details
  • shared\bcrypt.h: Various new algorithms supported including ECC, ECDH, ECDSA, XTS-AES. A new BCryptHash API has been added.
  • Most of the header files have been updated to keep up to date with the latest SAL annotation improvements.
  • shared\bugcodes.h: Various new defines for new blue screen error codes
  • shared\cfg.h: New CM_PROB_DEVICE_RESET, NUM_CM_PROB NUM_CM_PROB_V7 defines
  • shared\d3d9.h: New IDirect3D9Ex::RegisterSoftwareDevice function
  • shared\d3dukmdt.h: Various new references for WDDM 2.0
  • shared\ccomptypes.h: New DCOMPOSITION_TRANSFORM_MODE enum
  • shared\devioctl.h: New FILE_DEVICE_STORAGE_REPLICATION & FILE_DEVICE_TRUST_ENV defines
  • shared\devpkey: Various new DEFINE_DEVPROPKEY values
  • shared\diskguid.h: A new PARTITION_PATCH_GUID guid
  • shared\dpfilter.h: Two new DPFLTR_TYPE enums: DPFLTR_CAPIMG_ID & DPFLTR_VPCI_ID
  • shared\driverspecs.h: Various new SAL annotations for drivers
  • shared\dxgdi.h: New enum values for  DXGI_SWAP_EFFECT and DXGI_SWAP_CHAIN_FLAG
  • shared\dxgi1_4.h: A number of new COM interfaces for DXGI
  • shared\dxgiformat.h: Three new DXGI_FORMAT enum values
  • shared\dxgitype.h: Various new DXGI enums and structs
  • shared\emi.h: A new header file which refers to an “Energy Meter device”?
  • shared\evntprov.h: New  EVENT_DATA_DESCRIPTOR_TYPE_TIMESTAMP_OVERRIDE define, New EVENT_INFO_CLASS enum values
  • shared\evntrace.h: New defines: EVENT_TRACE_TYPE_CONFIG_MACHINEID, EVENT_TRACE_FLAG_JOB, EVENT_TRACE_FLAG_DEBUG_EVENTS, TraceVersionInfo, TRACE_VERSION_INFO structure,
  • shared\fwptypes.h: New IPSEC_VIRTUAL_IF_TUNNEL_INFO0_ structure
  • shared\fwpvi.h: New FwpsVirtualIfTunnelInfoGet define
  • shared\GenericUsbFnIoctl.h: New IOCTL codes for Generic USB function class driver
  • shared\gnssdriver.h: Looks like a new header file for a GPS related driver
  • shared\hidclass.h: New DEVPKEY_DeviceInterface_HID_BackgroundAccess, IOCTL_HID_ENABLE_WAKE_ON_SX, IOCTL_HID_SET_S0_IDLE_TIMEOUT & IOCTL_HID_DEVICERESET_NOTIFICATION defines
  • shared\hidusage.h: Various new HID_USAGE_* defines
  • shared\ifdef.h: New NET_IF_COMPARTMENT_* defines
  • shared\infstr.h: New INFSTR_PLATFORM_NTARM64. Again this signals that Windows will be running on ARM64 chips in the very near future
  • shared\ipsectypes.h: New IPSEC_SA_BUNDLE_FLAG_IP_IN_IP_PKT define
  • shared\ks.h: Various new Kernel Streaming defines, structs & enums. New Ks* kernel mode functions.
  • Shared\ksarm.h: New header files for ARM defines. Again seems to indicate details about ARM64
  • Shared\ksmedia.h: References to new Windows Phone Cellular Streaming, FM Receiver, Telephony, Camera control, VoIP and other Kernel streaming features. These could be part of the new face detection authentication mechanisms in Windows 10
  • shared\kxamd64.inc: A new file which contains various x64 assembly language macros and constants
  • shared\kxarm.inc: A new file which contains various ARM assembly language macros and constants
  • shared\kxarmuw.h: A new file which contains ARM assembly language routines
  • shared\lamp.h: A new header file to support a “Lamp” device. This may be kernel support for a IoT type LED device
  • shared\lmerr.h: New NERR_AlreadyCloudDomainJoined & NERR_PlainTextSecretsRequired defines
  • shared\macamd64.inc: A new file with various x64 assembly language macros and constants
  • shared\Math3DHelper.h: A new math header file with support for vector, matrix and quaternion calculations
  • shared\mstcpip.h: New defines and structs for “Real Time Notification”
  • shared\ndkinfo.h: New NDK_RDMA_TECHNOLOGY enum
  • shared\netioapi.h: New GetCurrentThreadCompartmentScope, SetCurrentThreadCompartmentScope, GetJobCompartmentId, SetJobCompartmentId functions
  • shared\netiodef.h: References to ARM64
  • shared\nfcdtadev.h: Support for a new NFC DTA device driver
  • shared\nfcradiodev.h: Support for a new NFC radio device
  • shared\nfcsedev.h: Support for a new NFC SE device driver
  • shared\ntdddisk.h: New GPT_SPACES_ATTRIBUTE_NO_METADATA define.
  • shared\ntddkbd.h: New IOCTL_KEYBOARD_QUERY_EXTENDED_ATTRIBUTES & KEY_RIM_VKEY defines and KEYBOARD_EXTENDED_ATTRIBUTES structure.
  • shared\ntddndis.h: New defines to support NDIS v6.50 functionality included with Windows 10
  • shared\ntddscsi.h: various new defines and structs for SCSI drivers
  • shared\ntddser.h: New defines for USB serial ports
  • shared\ntddstor.h: Some new IOCTLs, enums, structs. These relate to attributes such as temperature, Form Factor, Health Status, Vendor information, Topology, Power consumption & Firmware details.
  • shared\ntddvdeo.h: New elements in VIDEO_WIN32K_CALLBACKS_PARAMS struct
  • shared\ntdef.h: References to ARM64, New OBJ_IGNORE_IMPERSONATED_DEVICEMAP define. The following PRODUCT_* defines have been added: PRODUCT_NANO_SERVER, PRODUCT_CONNECTED_CAR, PRODUCT_INDUSTRY_HANDHELD, PRODUCT_PPI_PRO, PRODUCT_ARM64_SERVER, PRODUCT_EDUCATION, PRODUCT_EDUCATION_N, PRODUCT_IOTUAP, PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER, PRODUCT_ENTERPRISE_S, PRODUCT_ENTERPRISE_S_N, PRODUCT_PROFESSIONAL_S, PRODUCT_PROFESSIONAL_S_N, PRODUCT_ENTERPRISE_S_EVALUATION, PRODUCT_ENTERPRISE_S_N_EVALUATION. These are all very interesting values and in particular PRODUCT_ARM64_SERVER which indicates most clearly that Microsoft will be announcing some type of Windows Server product which will be targeting the upcoming ARM64 architecture. Also the PRODUCT_IOTUAP probably indicates the Windows 10 IoT release. I’m not sure what the “_S” values refer to. The PRODUCT_NANO_SERVER refers to the stripped down version of Windows Server which was announced at Build 2015. I will be updating my DtWinVer code in the next few weeks to report these values as well as the recently announced versions of Windows 10.
  • shared\ntiologic.h: New Win32 Error code
  • shared\ntstatus.h: Various new Win32 Facility codes and error codes. Mention of error codes for Remote TPM,
  • shared\ntverp.h: Various defines to refer to the current Windows 10 build. The header files included with VS 2015 RC refer to build 10011 of Windows 10 currently.
  • shared\pciprop.h: Various new defines to refer to PCI ACS & PCI Iommu.
  • shared\poclass.h: Various new defines for Thermal Cooling, Batteries & Charging
  • shared\reshub.h: Various new defines for “resource hubs”. These correspond to various IO buses such as I2S, SPI and UART’s. Again this seems to be underlying work to support Windows IoT.
  • shared\rpc.h: References to ARM64
  • shared\rpcdce.h: New RPC_C_AUTHN_CLOUD_AP define, New RpcImpersonateClientContainer and RpcRevertContainerImpersonation functions.
  • shared\rpcdcep.h: New RPCFLG_WINRT_REMOTE_ASYNC & RPC_C_OPT_PRIVATE_DO_NOT_DISTURB defines, new _RpcFreeSystemHandle & I_RpcUninitializeNdrOle functions.
  • shared\rpcndr.h: References to ARM64, new MIDL* structs, new system_handle_t enums, new NdrClientCall4 & NdrAsyncClientCall2 functions.
  • Shared\scsi.h: new WRITE_BUFFER struct, new SCSIOP_COMPARE_AND_WRITE, SCSI_WRITE_BUFFER_MODE* & SCSI_ADSENSE_MISCOMPARE_DURING_VERIFY_OPERATION defines.
  • shared\sddl.h: New SDDL_KEY_ADMINS & SDDL_ENTERPRISE_KEY_ADMINS defines
  • shared\sdkddkver.h: New _WIN32_WINNT_WINTHRESHOLD, _WIN32_WINNT_WIN10 & _WIN32_IE_IE110, _WIN32_IE_WINTHRESHOLD, _WIN32_IE_WIN10, NTDDI_WINTHRESHOLD, NTDDI_WIN10 defines.
  • shared\sensorsdef.h: New header file for Windows Sensors defines
  • shared\sensorsstructures.h: New header file for Windows Sensors structs
  • shared\sensorutils.h: New header file for Windows Sensors functions
  • shared\specstrings.h: New SAL annotations
  • shared\srb.h: New SRB_FUNCTION_PROTOCOL_COMMAND, SRB_IOCTL_FLAGS_ADAPTER_REQUEST & SRB_PROTOCOL_FLAGS_ADAPTER_REQUEST defines
  • shared\Sspi.h: New SECPKG_FLAG_CREDENTIAL_ISOLATION_ENABLED, SECPKG_CALLFLAGS_APPCONTAINER_UPNCAPABLE, SECBUFFER_SRTP_PROTECTION_PROFILES & SECBUFFER_SRTP_MASTER_KEY_IDENTIFIER, SECPKG_ATTR_NEGOTIATED_TLS_EXTENSIONS, SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_5 & GUID SEC_WINNT_AUTH_DATA_TYPE_NGC defines. New SEC_SRTP_PROTECTION_PROFILES, SEC_SRTP_MASTER_KEY_IDENTIFIER & SecPkgContext_NegotiatedTlsExtensions, SEC_WINNT_AUTH_NGC_DATA structs. Support for a new Kernel mode asynchronous interface to SSPI. New QueryContextAttributesExA/W & QueryCredentialsAttributesExA/W function.
  • shared\stralign.h: References to ARM64
  • shared\strsafe.h:  References to ARM64
  • shared\tbs.h: New TBS_HANDLE & TPM_IFTYPE_SPB define. New Tbsi_Create_Windows_Key function
  • shared\TraceLoggingActivity.h: New helper classes and macros for ETW
  • shared\TraceLoggingProvider.h: New Event Provider API for C/C++
  • shared\usbfnbase.h: New header files to implement USB Function class drivers
  • shared\usbioctl.h: New elements in USB_PORT_PROPERTIES and USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS structs
  • shared\usbspec.h: Updates to handle USB 3.1.
  • shared\vhf.h: New header file to handle Virtual HID Framework.
  • shared\warning.h: References to ARM64.
  • shared\wdmguid.h: New GUID_DMA_CACHE_COHERENCY_INTERFACE, GUID_DEVICE_RESET_INTERFACE_STANDARD, GUID_IOMMU_BUS_INTERFACE & GUID_PCI_SECURITY_INTERFACE defines.
  • shared\winapifamily.h: A new concept of WINAPI_PARTITIONS has been added to Windows 10. Taken from the comment in this header file: In Windows 10, WINAPI_PARTITIONs will be used to add additional device specific APIs to a particular WINAPI_FAMILY.  For example, when writing Windows Universal apps, specifying WINAPI_FAMILY_APP will hide phone APIs from compilation.  However, specifying WINAPI_PARTITION_PHONE_APP=1 additionally, will unhide any API hidden behind the partition, to the compiler. Two new FAMILY defines have been introduced, they are: WINAPI_FAMILY_SYSTEM and WINAPI_FAMILY_SERVER. The values probably map to the concept of Windows Nano Server.
  • shared\winbio.h: New error codes for Windows Biometrics. These are part of the new face detection authentication mechanisms in Windows 10. Interestingly this header file makes reference to “NTDDI_WIN9”. This is probably the case of one group in Microsoft who are working on the new biometrics support in Windows 10 not quite being in sync with the development files being used by other groups in Windows 10. I expect this to be fixed for RTM.
  • shared\winbio_types.h:  New defines for Windows Biometrics. Areas covered include Facial, Voice, Fingerprint, Iris, Retina, Hand Geometry, Signature, Lip, Thermal Face and Hand, Gait, Scent, DNA, Ear Shape, Finger, Palm Print, Vein And Foot Print. Again this file references “NTDDI_WIN9”
  • shared\windot11.h: New defines for DOT11_*, New elements in DOT11_EXTSTA_ATTRIBUTE struct, New WFD structs.
  • shared\winerror.h: New FACILITY_* defines, various new Win32 error codes. There is a new set of error codes for SQLite. It takes up 740 lines in this header file. It looks like SQLite will now be shipped with Windows 10!
  • shared\winpackagefamilty.h: New header file which implements the new Partitions concept for Windows 10 APIs.
  • shared\winsmcrd.h: New IOCTL_SMARTCARD_GET_FEATURE_REQUEST, SCARD_T1_EPILOGUE_LENGTH, SCARD_T1_EPILOGUE_LENGTH_LRC & SCARD_READER_CONTACTLESS defines. It looks like some updates have been done for Smart Cards in Windows 10. I plan to update my SCardWrappers to support these new features in the near future.
  • shared\wlantypes.h: New defines for DOT11_*.
  • shared\ws2ipdef.h: New IP_GET_IFLIST, IPV6_GET_IFLIST & TCP_MAXRTMS defines.

Hopefully I should get around to Part two of this blog post in the next few weeks. Happy coding.

Categories: Programming

A Comprehensive comparison of the MFC & ATL changes in VS 2015 RC compared to Visual Studio 2013 Update 4 (Part 2)

May 13, 2015 Comments off

This is the second part of a two part blog post which compares MFC and ATL in VS 2015 RC with those in Visual Studio 2013. The first part of this blog post covered the changes in the header files. This follow-up blog post will cover the differences in the source code modules.

Please note that this review is based on the VS 2015 Release Candidate which was released at Build 2015 which took place from April 29th to May 1st. and as such you might expect some further changes at RTM time.

As ATL is mostly a header only library you would expect almost all of the differences to be in the MFC “.cpp” source code files.

Ok, let’s dive into the changes:

  • atl\atls\atlwinverapi.cpp
    • Throughout: Most of the code which existing in this module has been migrated to the header file atlwinverapi.h
  • mfc\amd64\inetcall_.s
    • Line 2: Minor update to a copyright message in a comment.
  • mfc\amd64\olecall_.s
    • Line 2: Minor update to a copyright message in a comment.
  • mfc\afxassert.cpp
    • Throughout: AfxAssertFailedLine function has been moved into afx.h.
  • mfc\afxbasepane.cpp
  • mfc\afxbasetabctrl.cpp
    • Line 182: The EnableActiveAccessibility  method is called in the CMFCBaseTabCtrl constructor
    •  Line 2641-2648: The CMFCBaseTabCtrl::FireChangeActiveTab method now calls NotifyWinEvent when a tab becomes active
    • Line 2841-2833: Addition of a new CMFCBaseTabCtrl::OnSetAccData method
    • Line 2835-2862: Addition of a new CMFCBaseTabCtrl::accHitTest method
    • Line 2864-2885: Addition of a new CMFCBaseTabCtrl::get_accChildCount method
    • Line 2898-2977: Addition of a new CMFCBaseTabCtrl::accNavigate method
    • Line 2879-3010: Addition of a new CMFCBaseTabCtrl::accDoDefaultAction method
    • Line 3012-3034: Addition of a new CMFCBaseTabCtrl::SetACCData method
    • Line 3036-3061: Addition of a new CMFCBaseTabCtrl::get_accRole method
    • Line 3063-3096: Addition of a new CMFCBaseTabCtrl::get_accValue method
    • Line 3098-3124: Addition of a new CMFCBaseTabCtrl::get_accState method
    • Line 3126-3150: Addition of a new CMFCBaseTabCtrl::get_accName method
    • Line 3152-3185: Addition of a new CMFCBaseTabCtrl::accLocation method
    • Line 3187-3208: Addition of a new CMFCBaseTabCtrl::get_accDefaultAction method
    • So basically all this new code in CMFCBaseTabCtrl is to now fully support Windows Active Accessibility
  • mfc\afxcolordlg.cpp
    • Line 162-186: Code has been added to CMFCColorDialog::OnInitDialog  to resize the dialog under certain conditions
  • mfc\afxcommandmanager.cpp
    • Line 21: More %Ts changes.
  • mfc\afxcontextmenumanager.cpp
    • Line 145: More %Ts changes.
  • mfc\afxcustomizebutton.cpp
    • Line 199: Removal of unnecessary code in CMFCCustomizeButton::CreatePopupMenu to check the value of “m_pWndParentToolbar”. This was probably the result of static code analysis of the MFC source.
  • mfc\afxdockablepaneadapter.cpp
    • Line 22 & 23: More %Ts changes.
  • mfc\afxdockingmanger.cpp
    • Line 46: More %Ts changes.
  • mfc\afxdropdowntoolbar.cpp
    • Line 247: Removal of unnecessary code to check “m_strClassName” is empty before calling AfxRegisterWndClass in CMFCDropDownFrame::Create  method
  • mfc\afxeditbrowsectrl.cpp
    • Line 38: m_dwFileDialogFlags is set to a reasonable value in the CMFCEditBrowseCtrl constructor.
    • Line 354: m_dwFileDialogFlags value is now actually used when creating CFileDialog instance.
    • Line 378: More %Ts changes.
    • Line 531-540: CMFCEditBrowseCtrl::EnableFileBrowseButton is now passed a dwFlags parameter and the value is stored in m_dwFileDialogFlags.
  • mfc\afxframeimpl.cpp
    • Line 457, 505 & 529: More %Ts changes.
    • Line 2296: CFrameImpl::OnCompositionChanged now calls GetGlobalData()->ResetCheckCompositionFlag();
  • mfc\afxglobals.cpp
    • Line 961: More %Ts changes.
    • Line 1239-1242: Addition of a new AFX_GLOBAL_DATA::ResetCheckCompositionFlag method.
  • mfc\afxkeyboardmanager.cpp
    • Line 26: More %Ts changes.
    • Line 517: CKeyboardManager::TranslateCharToUpper now correctly NULL terminates a local string variable when compiled for ASCII/MBCS
  • mfc\afxkeymapdialog.cpp
    • Line 491 & 595: More %Ts changes.
  • mfc\afxkeymapdialog.cpp
    • Line 491 & 595: More %Ts changes.
  • mfc\afxlayout.cpp
    • This is the only new module in the MFC source code directory for VS 2015 and implements the new dynamic dialog feature as covered in Part 1 of this blog post.
  • mfc\afxlinkctrl.cpp
    • Line 114: More %Ts changes.
  • mfc\afxmdichildwndex.cpp
    • Line 1386: Removal of unnecessary code which referenced a “pTopLevelFrame” local variable. Also the logic to call ActivateTopLevelFrame is now based on “(nState == WA_ACTIVE)”
    • Line 1521-1542: Addition of a new CMDIChildWndEx::CanShowOnMDITabs method
  • mfc\afxmdiclientareawnd.cpp
    • Line 27: More %Ts changes.
  • mfc\afxmem.cpp
    • Line 76: The AfxAllocMemoryDebug function has been decorated with _AFX_DECLSPEC_ALLOCATOR.
  • mfc\afxmenutearoffmanager.cpp
    • Line 223: More %Ts changes.
  • mfc\afxmousemanager.cpp
    • Line 121 & 127: More %Ts changes.
  • mfc\afxoutlookbar.cpp
    • Line 27 & 28: More %Ts changes.
  • mfc\afxoutlookbarpane.cpp
    • Line 122: More %Ts changes.
  • mfc\afxpane.cpp
    • Line 46 & 47: More %Ts changes.
  • mfc\afxpanedivider.cpp
    • Line 23 – 77: Implementation of a new CPaneTrackingWnd class.
    • Line 109: m_pWndTrack member variable is explicitly set to NULL in CPaneDivider::Init. This was probably the result of static code analysis.
    • Line 291-297: CPaneDivider::OnLButtonDown now uses the new CPaneTrackingWnd class.
    • Line 380-383: CPaneDivider::OnMouseMove now uses the new CPaneTrackingWnd class.
    • Line 406-411: CPaneDivider::StopTracking now uses the new CPaneTrackingWnd class.
    • Line 479: Removal of defunct commented out code in CPaneDivider::Move
    • Line 718-723: CPaneDivider::OnDestroy now uses the new CPaneTrackingWnd class.
  • mfc\afxpopupmenu.cpp
    • Line 992 – 1004: Additional logic has been added to CMFCPopupMenu::RecalcLayout to decide on when to reposition the control.
    • Line 2162: More %Ts changes.
  • mfc\afxpopupmenubar.cpp
    • Line 816 – 819: The logic in CMFCPopupMenuBar::ImportFromMenu which sets the local variables “bPrevWasSeparator” and “bFirstItem” has been reworked.
  • mfc\afxpropertygridctrl.cpp
    • Line 51 & 2457: More %Ts changes.
    • Line 1200-1204: The code in CMFCPropertyGridProperty::TextToVar has been reworked for types VT_UINT & VT_UI4 to avoid integer overflow when using the function _ttol.
    • Line 2189-2193: Addition of a new CMFCPropertyGridColorProperty::SetOriginalValue method
  • mfc\afxpropertygridtooltipctrl.cpp
    • Line 55: Removal of unnecessary code to check “m_strClassName” is empty before calling AfxRegisterWndClass in CMFCPropertyGridToolTipCtrl::Create method
  • mfc\afxpropertysheet.cpp
    • Line 653 – 664: Code in CMFCPropertySheet::OnInitDialog now uses values from GetGlobalData() instead of hardcoded values and slightly different metrics to reposition the sheet and tab control.
    • Line 729-740: Addition of a new CMFCPropertySheet::GetNavBarWidth method
    • Line 1357-1365: Addition of a new CMFCPropertySheet::IsLeftNavigationPane method
    • Line 1367-1369: Addition of a new CMFCPropertySheet::CanAddPageToDynamicLayout method
  • mfc\afxribbonbar.cpp
    • Line 66, 67 & 6786: More %Ts changes.
  • mfc\afxribbonbutton.cpp
    • Line 2072: More %Ts changes.
  • mfc\afxribbonkeytip.cpp
    • Line 145: Removal of unnecessary code to check “m_strClassName” is empty before calling AfxRegisterWndClass in CMFCRibbonKeyTip::Show( method
  • mfc\afxribbonmainpanel.cpp
    • Line 132 & 136: More %Ts changes.
  • mfc\afxribbonpalettegallery.cpp
    • Line 170-173: CMFCRibbonGalleryIcon::OnClick now calls m_pOwner->PreClickPaletteIcon.
  • mfc\afxribbonpanel.cpp
    • Line 447 – 451: The CMFCRibbonPanel destructor now calls ::DestroyIcon for m_btnDefault.m_hIcon.
  • mfc\afxribbonpanelmenu.cpp
    • Line 1807-1840: The CMFCRibbonPanelMenu::OnMouseWheel method has new logic to redraw the ribbon bar.
  • mfc\afxribbonquickaccesstoolbar.cpp
    • Line 591: More %Ts changes.
  • mfc\afxribbonstatusbar.cpp
    • Line 32 & 33: More %Ts changes.
  • mfc\afxstatusbar.cpp
    • Line 73: Removal of an unnecessary second initialization of the “m_cxRightBorder” member variable in CMFCStatusBar constructor. This was probably the result of static code analysis of the MFC source.
  • mfc\afxtabctrl.cpp
    • Line 1910-1918: Logic to reposition the individual tabs has been reworked in CMFCTabCtrl::RecalcLayout.
  • mfc\afxtagmanager.cpp
    • Line 196: More %Ts changes.
  • mfc\afxtaskspane.cpp
    • Line 32 & 33: More %Ts changes.
  • mfc\afxtls.cpp
    • Line 29: Additional checking for NULL pointers has been added to CThreadSlotData::GetThreadValue.
  • mfc\afxtoolbar.cpp
    • Line 56-58: More %Ts changes.
  • mfc\afxtoolbarcomboboxbutton.cpp
    • Line 879: CMFCToolBarComboBoxButton::OnDraw now uses the flag DT_NOPREFIX when drawing the combo box text.
    • Line 1806: CMFCToolBarComboBoxEdit::OnPaint now uses the flag DT_NOPREFIX when drawing the combo box text
  • mfc\afxtoolbarimages.cpp
    • Line 970 & 1901: More %Ts changes.
  • mfc\afxtoolbarscustomizedialog.cpp
    • Line 641: More %Ts changes.
  • mfc\afxtoolbarslistcheckbox.cpp
    • Line 91: Removal of unnecessary C style cast in CMFCToolBarsListCheckBox::OnLBDeleteString.
  • mfc\afxtooltipctrl.cpp
    • Line 49: m_sizeCornerRadius is now explicitly initialized in CMFCToolTipCtrl constructor. This was probably the result of static code analysis of the MFC source.
    • Line 166: The logic to set m_ptMargin in CMFCToolTipCtrl::OnShow has been simplified.
    • Line 280-281: The logic in CMFCToolTipCtrl::OnShow which positions the control has been modified.
    • Line 377-298: The logic in CMFCToolTipCtrl::OnDrawBorder to draw the control has been modified.
  • mfc\afxtrace.cpp
    • Line 237, 278, 342, 346, 354 & 358: More %Ts changes.
  • mfc\afxusertool.cpp
    • Line 68: More %Ts changes.
  • mfc\afxvisualmanager.cpp
    • Line 2106: Redundant code in CMFCVisualManager::OnDrawTasksGroupCaption has been refactored into a single function call.
  • mfc\afxvisualmanageroffice2007.cpp
    • Line 365: More %Ts changes.
  • mfc\afxvisualmanagerwindows7.cpp
    • Line 129: More %Ts changes.
  • mfc\afxwindowsmanagerdialog.cpp
    • Line 470-472: Removed redundant reference to parameter value. This was probably the result of static code analysis of the MFC source.
  • mfc\appcore.cpp
    • Line 178: The size of a local string array in AfxLoadLangResourceDLL has been changed to accommodate %Ts changes.
    • Line 250: Minor change in a comment to update a code name reference to the Windows 8.1 SDK
    • Line 434: More %Ts changes.
  • mfc\appui.cpp
    • Line 139: More %Ts changes.
  • mfc\arcstrm.cpp
    • Line 125: The return value from CArchiveStream::SetSize has been changed to NOERROR from E_NOTIMPL.
  • mfc\ctrlcore.cpp
    • Line 1976: Removal of unnecessary C style cast in COleControl::XSpecifyPropertyPages::GetPages.
  • mfc\ctlimpl.h
    • Line 178: Update to a comment to mention that a member variable of PROPHEADER is no longer used.
  • mfc\ctlppg.cpp
    • Line 139, 142, 166, 169 & 175: More %Ts changes.
  • mfc\ctlpset.cpp
    • Line 147: Removal of code which previously called CPropertySet::SetOSVersion.
  • mfc\ctlreg.cpp
    • Line 148, 187, 399, 403, 470, 481, 486, 495 & 553: More %Ts changes.
  • mfc\daocore.cpp
    • Line 508, 510, 5640 & 5642: More %Ts changes.
  • mfc\dbcore.cpp
    • Line 67, 174, 180, 183, 954, 958 & 964: More %Ts changes.
    • Line 474: Code in CDatabase::OnSetOptions now uses a double C style cast when calling ::SQLSetStmtAttr
    • Line 733: Code in CDatabase::AllocConnect now uses a double C style cast when calling ::SQLSetConnectAttr
    • Line 1648: Code in CRecordset::SetRowsetSize now uses a double C style cast when calling :: SQLSetStmtAttr
    • Line 2515: Code in CRecordset::PrepareAndExecute  now uses a double C style cast when calling ::SQLSetStmtAttr
    • Line 2802 & 2810: Code in CRecordset::SetConcurrencyAndCursorType now uses a double C style cast when calling :: SQLSetStmtAttr
  • mfc\displimpl.cpp
    • Line 13: The Inclusion of the now defunct header file “afxv_cpu.h “ has been removed
    • Line 52-68: New enums to support ARM64 platforms.
  • mfc\dlgcore.cpp
    • Line 924, 956 & 966: More %Ts changes.
  • mfc\dlgdhtml.cpp
    • Line 825 & 844: More %Ts changes.
  • mfc\dlgfile.cpp
    • Line 33: Minor change in a comment to update a code name reference to the Windows 8.1 SDK
  • mfc\dlgprop.cpp
    • Line 355-371: Code has been added to support dynamic dialogs in CPropertyPage::OnSetActive.
    • Line 600: A message handler for WM_GETMINMAXINFO has been added to CPropertySheet.
    • Line 688: m_sizeMin is now explicitly initialized in CPropertySheet::CommonConstruct method
    • Line 1225: Fix for an obvious typo error in a call to ASSERT in CPropertySheet::SetActivePage. . This was probably the result of static code analysis of the MFC source.
    • Line 1462-1465: Code has been added to support dynamic dialogs in CPropertySheet::OnNcCreate.
    • Line 1474-1500: Code has been added to support dynamic dialogs in CPropertySheet::HandleInitDialog.
    • Line 1552-1560: A new CPropertySheet::OnGetMinMaxInfo method has been implemented. This is to support dynamic dialogs
  • mfc\dllinit.cpp
    • Line 618 & 620: More %Ts changes.
  • mfc\doccore.cpp
    • Line 267 &275: The two places in the method CDocument::SetPathName which throw an exception using AfxThrowFileException now provides the filename value.
  • mfc\docstat.cpp
    • Line 21 & 22: More %Ts changes.
  • mfc\docmgr.cpp
    • Line 14-19, 96 & 114: More %Ts changes.
  • mfc\dumpcont.cpp
    • Line 23: More %Ts changes.
  • mfc\filecore.cpp
    • Line 664, 674 & 696: More %Ts changes.
  • mfc\fileshrd.cpp
    • Line 48: Removal of unnecessary C style cast in CSharedFile::SetHandle.
  • mfc\filex.cpp
    • Line 113: More %Ts changes.
  • mfc\inet.cpp
    • Line 350, 354, 364, 1009 & 1436: More %Ts changes.
  • mfc\occimpl.h
    • Line 71: CDataSourceControl destructor has been made virtual.
  • mfc\occsite.cpp
    • Line 1529: Removal of unnecessary code in COleControlSite::BindDefaultProperty when calling m_pDSCSite->m_pDataSourceControl->BindColumns.
  • mfc\olecli1.cpp
    • Line 998, 1060, 1067 & 1130: More %Ts changes.
  • mfc\olecli3.cpp
    • Line 102: More %Ts changes.
  • mfc\oledisp1.cpp
    • Throughout: Changes to CCmdTarget::PushStackArgs, _AfxDispatchCall & CCmdTarget::CallMemberFunc to support ARM64 platforms.
  • mfc\oledisp2.cpp
    • Line 114: More %Ts changes.
  • mfc\oledlgs1.cpp
    • Line 692: More %Ts changes.
  • mfc\oledlgs3.cpp
    • Line 181: More %Ts changes.
  • mfc\oledoccl.cpp
    • Line 330: More %Ts changes.
  • mfc\olefact.cpp
    • Line 142 & 372: More %Ts changes.
  • mfc\oleinit.cpp
    • Line 68: More %Ts changes.
  • mfc\olelink.cpp
    • Line 178 & 365: More %Ts changes.
  • mfc\olemisc.cpp
    • Line 386, 387, 395, 396, 406, 408, 423 & 974: More %Ts changes.
    • Line 684: Removal of unnecessary C style cast in _AfxCopyGlobalMemory
  • mfc\olepset.cpp
    • Line 1330 & 1342: m_PH.dwOSVer is now initialized to 0 in CPropertySet constructors instead of calling GetVersion and is marked as defunct.
  • mfc\olereg.cpp
    • Line 447,490, 503, 504, 514, 530, 543, 555 & 589: More %Ts changes.
  • mfc\olesvr1.cpp
    • Line 338: More %Ts changes.
  • mfc\oleunk.cpp
    • Line 38, 47, 202, 235, 257, 286, 309, 394 & 396: More %Ts changes.
  • mfc\viewedit.cpp
    • Line 145: More %Ts changes.
    • Line 1251-1272: Changes in CEditView::FindText logic to handle Unicode strings when compiled for single byte.
  • mfc\viewform.cpp
    • Line 34 & 46: m_bInitDlgCompleted member variable is explicitly set to FALSE in CFormView constructors. This was probably the result of static code analysis.
    • Line 139: m_bInitDlgCompleted member variable is set to TRUE in CFormView::OnInitialUpdate method.
  • mfc\viewhtml.cpp
    • Line 1131 & 1152: More %Ts changes.
  • mfc\wincore.cpp
    • Line 19: Inclusion of the new header file afxlayout.h.
    • Line 45: Removal of global g_RenderTargets and g_RenderTargetCriticalSection global member variables.
    • Line 86: The default CWnd constructor now uses delegating constructor. C++ 11 finally comes to MFC, Yah!!!.
    • Line 93: m_pStdObject member variable is explicitly set to NULL in CWnd constructor. This was probably the result of static code analysis.
    • Line 110: m_pRenderTarget member variable is explicitly set to NULL in CWnd constructor.
    • Line 111: The new m_pDynamicLayout member variable is explicitly set to NULL in CWnd constructor.
    • Line 819-823: The new m_pDynamicLayout member variable is cleaned up in the CWnd destructor.
    • Line 849-854: The new m_pRenderTarget member variable is cleaned up in the CWnd destructor.
    • Line 1419, 1825 & 1850: More %Ts changes.
    • Line 210-2113, 2158: Code has been added to CWnd::OnWndMsg to implement the new dynamic dialogs feature upon receiving a WM_CREATE and WM_SIZE messages.
    • Line 2160:Code which accesses the CHwndRenderTarget pointer in response to WM_SIZE in CWnd::OnWndMsg has been reworked
    •  Line 2178-2182: Code which accesses the CHwndRenderTarget pointer in response to WM_ERASEBKGND in CWnd::OnWndMsg has been reworked
    • Line 2665: The X and Y values extraction from a LPARAM have been reversed in CWnd::OnWndMsg which calling though the MFC message map mechanism. This looks like a simple bug fix.
    • Line 4517: Code has been added to CWnd::ExecuteDlgInit to implement the new dynamic dialogs feature
    • Line 5028-5061: A new “BOOL bUseDCRenderTarget” parameter has been added to CWnd::EnableD2DSupport.
    • Line 5068: The CWnd::IsD2DSupportEnabled method has been reworked to check a member variable rather than consult a global variable which requires locking.
    • Line 5071-5074: The CWnd::GetRenderTarget method has been reworked to return a member variable rather than consult a global variable which requires locking.
    • Line 5076-5078: Addition of a new CWnd::GetDCRenderTarget method
    • Line 5075: The CWnd::LockRenderTarget and CWnd::UnlockRenderTarget methods have been removed.
    • Line 5081-5168: The CWnd::DoD2DPaint has been significantly reworked.
    • Line 5170-5270: Addition of new CWnd::EnableDynamicLayout, CWnd::InitDynamicLayout & CWnd::LoadDynamicLayoutResource methods to implement the new dynamic dialogs feature.
  • mfc\winfrm.cpp
    • Line 1278 & 1286: More %Ts changes.

Hopefully these two blog posts were useful for those developers thinking of migrating their large ATL / MFC code base to the latest version of Visual Studio. Happy coding.

Categories: Programming

CServerMailslot & CClientMailslot v1.16

May 10, 2015 Comments off

Just to let everyone know that v1.16 of CServerMailslot and CClientMailslot has been released. Updates for this version include:

  • Updated copyright details.
  • Updated the project settings to more modern defaults
  • Removed all unnecessary TRACE calls
  • Made the classes into a header only implementation
  • Updated the code to clean compile on VC 2013
  • Reworked the CServerMailslot::Open and CClientMailslot::Open to provide the full mailslot name as its first parameter. This allows the class to avoid the use of CString
  • Addition of a CServerMailslot::GetInfo method which encapsulates GetMailslotInfo.
  • Removed the CServerMailslot::MessageWaiting, MessageCount, SizeOfWaitingMessage, MaximumMessageSize, GetCreationTime, GetLastAccessTime & GetLastWriteTime methods
  • Added SAL annotations to all the code
  • Reworked the CServerMailslot::Read method to use a pointer for returning the number of bytes read
  • Reworked the CClientMailslot::Write method to use a pointer for returning the number of bytes write
  • Replaced all ASSERT calls with ATLASSERT. This means that the class can now be used without the need to pull in MFC
Categories: Web Site Updates

A Comprehensive comparison of the MFC & ATL changes in VS 2015 RC compared to Visual Studio 2013 Update 4 (Part 1)

May 7, 2015 7 comments

As my area of expertise is in libraries rather than new language features, I thought it would be useful to see what has been changed in MFC and ATL in Visual Studio 2015. If you want to review what’s new in the C++ language in VS 2015, please take a look at https://www.visualstudio.com/en-us/news/vs2015-vs.aspx. Please note that this review is based on the VS 2015 Release Candidate which was released at Build 2015 which took place from April 29th to May 1st. and as such you might expect some further changes at RTM time.

  • afx.h
    • Line 44: The #error line has been updated to mention that MFC is supported on ARM64 platforms. What I have noticed is in VC 2015 you can now compile native mode ARM binaries out of the box without getting the “error MSB8022: Compiling Desktop applications for the ARM platform is not supported. “ compiler error which you previously got in VC 2013. This in part is the enabling work to support Windows IoT and other upcoming 64 bit ARM processors which MFC looks like will be targeting. I was able to successfully compile my DtWinVer code for ARM in VS 2015 with relatively little changes (The compiler flag /ZI does not seem to be supported on ARM yet). Any migrated projects also get a new “_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE” pre-processor value. Here’s a screen capture of it running taken from my Windows 10 VM which connected to the Pi using PowerShell and Windows Remote Management:

    DtWinVer on Raspberry Pi 2

    • I will be officially updating DtWinVer to support Visual Studio 2015, ARM and Windows IoT in the next few weeks. These changes make for some very interesting developments and times ahead for Microsoft desktop development on non x86/x64 chips.
    • Line 327: AfxAssertFailedLine has been made inline and looks like it has a bug fix around WM_QUIT handling
    • Multiple locations: TRACE calls have been updated to use a %Ts format specifier instead of %s. This looks like an interesting and breaking change for client code which uses printf, CString::Format functionality and which support Unicode. It turns out that %s in VC 2015 will map to narrow string (char*) always unless you define _CRT_STDIO_LEGACY_WIDE_SPECIFIERS. Check out http://stackoverflow.com/questions/10000723/visual-studio-swprintf-is-making-all-my-s-formatters-want-wchar-t-instead-of for the issue. It looks like this change is going to be the most upsetting change to migrate your existing MFC code to VS 2015.
    • Line 1476: AfxAllocMemoryDebug has been decorated with a __declspec(allocator) value. This looks like part of the new Memory Diagnostics tools in VC 2015. Check out http://blogs.msdn.com/b/vcblog/archive/2014/06/04/native-memory-diagnostic-tools-for-visual-studio-14-ctp1.aspx
  • Afxanimationhelper.h
    • Line 88: The declaration of IID_IUnknown has been fixed.
  • afxbasepane.h
    • Line 41 and 52: Removal of unnecessary C style enum declarations. This and similar changes were done probably from the static code analysis fixes suggested by a fellow C++ MVP: Andrey Karpov and his commercial product PVS-Studio
  • afxbasetabctrl.h
    • Throughout: Inclusion of new header file and new code to support active accessibility in CMFCBaseTabCtrl
  • afxcmn.h
    • Line 743 & 2151: Fixes to SAL annotation in CTreeCtrl::SetImageList & CReBarCtrl::SetImageList
  • afxcontrolbarutil.h
    • Line 118: Removal of unnecessary C style enum declarations
  • afxcontrolrenderer.h
    • Line 89: Removal of an unused rectImage local variable.
  • afxctl.rc
    • Line 173: More %Ts changes
  • afxdisp.h
    • Line 34: Suppression of compiler error C4091 while including shlobj.h
  • afxdlgs.h
    • Line 489: CFileDialog::m_szFileTitle is now allocated using MAX_FNAME rather than the value 64
    • Line 1082-1083: Addition of two new virtual functions CFileDialog::IsLeftNavigationPane and CFIleDialog::CanAddPageToDynamicLaout. This is part of the support for the new dynamic dialog layout feature described later
    • Line 1091: Addition of a CSize m_SizeMin member variable
    • Line 1101: Addition of a OnGetMinMaxInfo message handler
  • afxeditbrowsectrl.h
    • Line 57 & 67: New parameter to the CMFCEditBrowseCtrl::EnableFileBrowseButton which gets stored in the m_dwFileDialogFlags member variable already discussed. This allows the flags passed to CFileDialog to be customized for CMFCEditBrowseCtrl. For an alternative implementation which already supports this check out http://www.naughter.com/ddxgetfile.html
  • afxext.h
    • Line 806 and 812: A new IsIntDlgCompleted method and associated m_bInitDlgCompleted member variable in CFormView. This is probably a bug fix to ensure OnInitialUpdate only fires once. This issue affected the CDialog class in previous versions of MFC.
  • afxglobals.h
    • Line 34: Removal of unnecessary C style enum declarations
    • Line 317: Addition of a new ResetCheckCompositionFlag method to AFX_GLOBAL_DATA struct
  • afxhtml.h
    • Line 826 & 959: More %Ts changes
  • afxlayout.h
  • afxmdichildwndex.h
    • Line 206: Addition of a new CanShowOnMDITabs method to CMDIChildWndEx
  • afxmultidoctemplateex.h
    • Line 26: Fix up suppression of C4510 & C4610 compiler errors
  • afxolecl.rc
    • Line 53-54: More %Ts changes
  • afxpane.h
    • Line 42: Removal of unnecessary C style enum declarations
  • afxpanedivider.h
    • Line 28: New forward declaration of CPaneTrackingWnd class
    • Line 158: The CPaneDivider classes contains a new CPaneTrackingWnd pointer member variable
  • afxpaneframewnd.h
    • Line 43: Removal of unnecessary C style enum declarations
  • afxplex_.h
    • Line 28-43: Tidy up of the CPlex class declaration and memory layout
  • afxpropertygridctrl.h
    • Line 164: The CMFCPropertyGridProperty::SetOrginalValue method has been made virtual
    • Line 264: A new derived CMFCPropertyGridColorProperty::SetOriginalValue method has been implemented
  • afxpropertysheet.h
    • Line 126: Addition of a new CMFCPropertySheet:GetNavBarWidth method
    • Line 171-172: Addition of new IsLeftNavigationPane and CanAddPageToDynamicLayout methods. Again part of the support for the new MFC dynamic dialogs
  • afxrendertarget.h
    • Line 13-23: Inclusion of a new header file d3d9types.h and correct suppression of C4458 compiler error
  • afxres.h
    • Line 26: Definition of the new MFC version number of 140
  • afxres.rc
    • Line 69-70, 100, 160: More %Ts changes
  • afxribbon.rc
    • Line 601, 621, 624 & 632: More %Ts changes
  • afxribbonpalettegallery.h
    • Line 123: Addition of a new virtual CMFCRibbonGallery::PreClickPaletteIcon method
  • afxsmartdockingguide.h
    • Line 218: The template function GetSmartDockingWndClassName has been simplified
  • afxtempl.h
    • Line 164: The template function HashKey now supresses the C4311 compiler error
  • afxtooltipctrl.h
    • Line 38: Addition of a comment to indicate that CMFCToolTipInfo::m_bRoundedCorners is Obsolete
    • Line 115: Addition of a new CToolTipCtrl::m_sizeCornerRadius member variable.
  • afxv_cpu.h:
    • This header file has been removed from MFC in VC 2015
  • afxv_w32.h
    • Line 149-151 & 184-187: Changes to correctly save and restore packing settings
  • afxver_h
    • Line 20, 24, : The version number of MFC has been incremented from 12.00 to 14.00
    • Line 87-90: Changes to handle removal of defunct afxv_cpu.h module around the area of packing.
  • afxwin.h
    • Line 216: Forward declaration of the new CMFCDynamicLayout class.
    • Line 1361-1363, 1702-1704: Changes to specific some ARM64 structs
    • Line 1840-1848: Changes to handle stack pushing changes in CCmdTarget for ARM64.
    • Line 2970-2991: Addition of new EnableDynamicLayout, IsDynamicLayout and GetDynamicLayout methods to CWnd. Again this is part of the new dynamic dialogs feature.
    • Line 3084-3092: Addition of new member variable m_pDynamicLayout, ResizeDynamicLayout, InitDynamicLayout and LoadDynamicLaoutResource methods to CWnd. Again this is part of the new dynamic dialogs feature.
    • Line 3259-3285: Changes to the D2D methods in CWnd to support DC render targets in addition to HWND render targets
    • Line 6615: Inclusion of the new afxlayout.h header file
  • afxwin1.inl
    • Line 71-79: Fix up suppression of C6271 & C6273 compiler errors in CGdiObject destructor
  • afxwin2.inl
    • Line 1087-1095: Fix up suppression of C6271 & C6273 compiler errors in CWaitCursor destructor
  • afxwinforms.h
    • Line 42 & 46: Updates to MFC version numbers
  • afxwinforms.inl
    • Line 15 & 16: Updates to calling convention for AfxmEnsureManagedInitialization and AfxmReleaseManagedReferences functions
  • atlacc.h
    • Line 1253: Updates to declaration of names static table in AtlIAccessibleGetIDsOfNamesHelper function
  • atlalloc.h
  • atlbase.h
    • Line 3084: GetAppIdT is now declared as returning a const TCHAR* instead of TCHAR.
    • Line 4014: nShowCmd parameter to CAtlServiceModuleT::PreMessageLoop is not marked as an unreferenced parameter.
    • Line 4017: #ifdef code in CAtlServiceModuleT::PreMessageLoop has been expanded in scope to include local variables which are only used inside the #ifdef block of code. Again this was probably fixed as the results of some static analysis results
    • Line 5031-5033: The return value from CoInitialize is now checked. This is probably the result of making the code /analyze clean when used with used with newer versions of the Windows SDK which now have SAL annotations on the CoInitialize API.
    • Line 6308: The return value from StringFromGUID2 is checked in CRegKey::SetGUIDValue. Again the result of /analyze clean work.
    • Line 6348, 6466, 6518, 6889, 6922: More %Ts changes.
    • Line 7276: The return value from StringFromGUID2 is checked in AtlRegisterClassCategoriesHelper. Again the result of /analyze clean work.
  • atlbuild.h
    • Line 4-16: Updates to the build numbers of ATL. It is now 14.00.22816.
  • atlcoll.h
    • Line 19, 38-40: Changes to handle removal of defunct afxv_cpu.h module and packing of CAtlPlex class.
  • atlcom.h
    • Line 2397, 4518: Changes to support ARM64 as a valid compilation platform
    • Line 3933: Additional SAL annotations to CComClassFactorySingleton::CreateInstance parameter
    • Line 4328: More %Ts changes.
    • Line 4694: Additional SAL annotations to IDispEventSimpleImpl::Invoke parameter
    • Line 5208: Additional SAL annotations to IProvideClassInfoImpl::GetClassInfo parameter
    • Line 5232: Additional SAL annotations to IProvideClassInfo2Impl::GetClassInfo parameter
    • Line 6650: Replacement of the constant 3 with SEVERITY_ERROR in AtlSetErrorInfo.
    • Line 6949 & 6957: More %Ts changes.
  • atlcomcli.h
    • Line 525: Addition of a C style cast in CComPtr::InvokeN on a parameter. This is probably due to improvements in the Prefast static analyser in VC 2015
    • Line 544-591: Changes to the name of an IDispatch parameter to CComPtr::PutProperty and CComPtr::GetProperty methods
    • Line 795-797: The return value from StringFromGUID2 is checked in a in a CComBSTR constructor. Again the result of /analyze clean work.
  • ATLComMem.h
  • atlconv.h
  • atlcore.h
    • Line 592-603: Changes to the AtlPrintfT function to handle the new %Ts changes. The comments in the modified code in this function are quite interesting and might be worth covering in a future VC blog post about breaking changes VS 2015 before it gets to RTM
  • atlctrl.h
    • Line 188-206: member variables in CComControlBase constructor are now explicitly initialized rather than relying on a memset call. Again this change is probably the result of static code analysis.
    • Line 776: Removal of a “HWND* m_phWndCD” member variable from CComControlBase. It looks like an unused member variable which static code analysis spotted.
    • Line 4055, 4076, 4091, 4112, 4127 & 4151: More %Ts changes
  • atldb.h
    • Line 230-234: More %Ts changes
    • Line 687-689: The return value from StringFromGUID2 is checked in AtlTraceErrorRecords. Again the result of /analyze clean work.
    • Line 691: More %Ts changes
    • Line 6232: m_bIsParent method uses COLUMN_ENTRY_TYPE instead of COLUMN_ENTRY in CEnumeratorAccessor column map
    • Line 6354: More %Ts changes
  • atldbgmem.h
  • atldbsch.h
    • Throughout: Changes to various Boolean member variables of ATL DB accessor classes to use COLUMN_ENTRY_TYPE instead of COLUMN_ENTRY
  • atldef.h
    • Line 122, 385: Change to support ARM64 compilation and packing
    • Line 511-522: Updates to the build numbers of ATL
    • Line 583 & 584: Updates to Window Class names used by ATL
    • Line 633-637: Defines to support __declspec(allocator) support in ATL
  • atlevent.h
    • SAL annotations added to _EventingCriticalSectionAuto::Lock and Unlock to indicating locking semantics of class
  • atlhost.h
    • Line 366-397: All member variables in CAXHostWindow constructor are now explicitly initialized. Again this change is probably the result of static code analysis.
    • Line 2474, 2483, 2593 & 2602: Updates to CAxHostWindow::AtlAxWindowProc and CAxHostWindow::AtlAxWindowProc2 to compile cleanly using /analyze
    • Line 2498, 2499, 2622 & 2623: More %Ts changes
  • atlimage.h
    • Line 36-43: Fix up suppression of C4458 compiler errors
  • atlmem.h
  • atlplus.h
    • Line 334, 431, 592, 615, 724, 787 & 903: More %Ts changes
  • atlsecurity.h
    • Line 585, 589, 4072, 4075, 4080 & 4086: “bInheritHandle” parameter name in CSecurityAttributes constructor and CSecurityAttributes::Set method has been renamed
    • Line 5147-5159: The return value from CoRevertToSelf is checked in CAccessToken::OpenCOMClientToken. Again the result of /analyze clean work.
  • atlsimpcoll.h
    • Line 164: Additional SAL annotations to CSimpleArray::Add
    • Line 193: Additional SAL annotations to CSimpleArray::Remove
    • Line 202: Additional SAL annotations to CSimpleArray::RemoveAt
    • Line 259: Additional SAL annotations to CSimpleArray::SetAtIndex
  • atlstdthunk.h
    • Some of this modules functionality has been refactored into a new atlthunk.h header file
    • Line 221-254, 314-347: The ATL thunk to map HWND to CWindow instances has been implemented for ARM64
    • Line 357-428: The CDynamicStdCallThunk2 class has been significantly reworked. This is probably in light of the ARM64 support added to this module.
  • atlstr.h
    • Line 172-228: Addition of new functions in an AtlUtil namespace to handle varargs sprint functionality. These change look like they are related to the %Ts changes
    • Line 565-574, 1066-1075: The ChTraitsOS has been updated to use the new AtlUtil methods instead of calling wvspringfA directly.
    • Line 792: ChTraitsOS::lstrcmpiW now calls wsccmp instead of lstrcmpiW.
    • Line 1230-1240: CHTraits::strstrT has been updated to use C++ typename keyword
  • atlsync.h
    • Line 514: Fix up suppression of C4311 compiler errors
  • atlthunk.h
    • New module which implements some of the ATL HWND to CWindow instance thunk.
  • atltime.h
    • Line 377-391: Addition of a new CTime::GetAsDBTIMESTAMP method
    • Line 505-516: The CTime constructor which takes a FILETIME& parameter now uses the SystemTimeToTZSpecificLocalTime API.
    • Line 693 & 694: More %Ts changes
  • atltrace.h
    • Line 21: The tchar.h system header file is now included
    • Line 144, 226, 269: Removal of redundant class name from CTrace::TraceV method
    • Line 161 – 198, 282-320: Changes throughout CTrace::TraceV method to use more correct printf format specifiers
    • Line 346-350: Changes in CTrace::RegisterCategory to use more correct printf format specifiers
    • Line 387-402: Addition of a new CPreserveLastError which preserves the Win32 GetLastError value across a scope instance of itself.
    • Line 422-463: The CTraceFileAndLineInfo now use the new CPreserveLastError class to preserve the Win32 GetLastError value across its operator() methods.
    • Line 567-609: All AtlTrace* functions now use the new CPreserveLastError class to preserve the Win32 GetLastError value.
    • Line 617: More %Ts changes
  • atltransactionmanager.h
    • line 25: __uncaught_exception is now declared as extern “C”
  • atlutil.h
    • Line 29-34: Fix up suppression of C4091 compiler errors
    • Line 365: A local variable in CStackDumper::ResolveSymbol is now declared as const char* instead of LPSTR.
    • Line 449-451: The _AtlThreadContextInfo is now aligned correctly for ARM64
    • Line 545-548: _AtlThreadContextInfo::DoDumpStack now supports ARM64
    • Line 2433: The CUrl::SetScheme method now includes a static_cast of its input parameter in its body
    • Line 2XXX: The Curl::Parse method has had some code which calls goto removed as it could never be reached
  • atlwin.h
    • Line 2837: The ATL END_MSG_MAP macro now includes a static_cast when calling ATLTRACE
    • Line 4216-4218: The return value from CreateStramOnHGlobal in CAxDialogImpl:: CreateActiveXControls is now checked
    • Line 5275: More %Ts changes
  • atlwinverapi.h
    • Throughout: This module has been significantly reworked with new structs, functions and tables to map LCID to and from locale names. This is to support Windows XP targeting which does not support Locale.
    • Line 724-738: _AtlInitializeCriticalSectionEx has been updated to use newer style SAL annotations
  • cstringt.h
    • Line 448: ChTraitsCRT::ReallocSysString has been updated to only call MultiByteToWideChar if the input parameter length is greater than zero
    • Line 678-738: Changes throughout ChTraitsCRT::GetFormattedLength & ChTraitsCRT::Format to use more correct printf format specifiers
  • statreg.h
    • Line 270: Removal of unnecessary int construction from CParserBuffer::Append
    • Line 473, 483,484,677,815,982,995,1000,1064,1354,1367,1377,1494,1533,1568,1570,16020 & 1634: More %Ts changes

I plan to produce a follow-up blog post where I post the details of the MFC source code diff of VS 2015 compared to VS 2013. I would expect most of the changes to be similar to the differences as described above in the corresponding header files but I would expect to find a few unrelated bug fixes also. I might also do a blog post on the new dynamic dialog mechanism if people are interested also.

Hopefully this review was useful for those developers thinking of migrating their large ATL / MFC code base to the latest version of Visual Studio. Happy coding.

Categories: Programming

CPDH v1.14

May 4, 2015 Comments off

Just to let everyone know that v1.14 of CPdh has been released. Updates for this version include:

  • Updated the code to clean compile on VC 2013
  • Updated copyright details
  • Reworked the classes to optionally compile without MFC. By default the classes now use STL classes and idioms but if you define CPDH_MFC_EXTENSIONS the classes will revert back to the MFC behaviour.
  • Added SAL annotations to all the code
  • Reworked CPdhDataSource::Update to take a LPCTSTR parameter
  • Verified there has been no further additions to PDH from the Windows 8.1 SDK
  • Added a new preprocessor macro value of “CPDH_NO_DYNLINK” to control inclusion of “cpdhimpl.h” in cpdh.cpp.
Categories: Web Site Updates