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

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

May 15, 2015

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
  1. September 19, 2015 at 8:22 pm

    I’m really enjoying the design and layout of your blog.
    It’s a very easy on the eyes which makes it much more enjoyable for me to
    come here and visit more often. Did you hire out a developer to create your
    theme? Outstanding work!

    • September 29, 2015 at 9:28 pm

      Just using some of the standard WordPress templates.

  1. No trackbacks yet.
Comments are closed.