How does this "dot" notation work? [solved]

I see some code like this in the USB firmware files (Descriptors.c):

const USB_Descriptor_Device_t DeviceDescriptor =
    .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},

    .USBSpecification       = VERSION_BCD(01.10),
    .Class                  = USB_CSCP_NoDeviceClass,
    .SubClass               = USB_CSCP_NoDeviceSubclass,
    .Protocol               = USB_CSCP_NoDeviceProtocol,

    .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,

    .VendorID               = 0x03EB,
    .ProductID              = 0x2067,
    .ReleaseNumber          = VERSION_BCD(00.01),

    .ManufacturerStrIndex   = NO_DESCRIPTOR,
    .ProductStrIndex        = NO_DESCRIPTOR,
    .SerialNumStrIndex      = NO_DESCRIPTOR,

    .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS

I'm not familiar with the use of dots in this way (eg. .Header). A Google search doesn't seem to come up with much except the usual stuff about dots separating things (eg. Serial.print) or some references to Java or Objective C.

Can anyone point me to some explanation about what this syntax means?

Hmmm, looks like it is C99: