NumEndpoints = InterfaceDescriptor->bNumEndpoints;
- Length = sizeof(USBD_INTERFACE_INFORMATION) +
- (NumEndpoints - 1) * sizeof(USBD_PIPE_INFORMATION);
+ Length = FIELD_OFFSET(USBD_INTERFACE_INFORMATION, Pipes) +
+ NumEndpoints * sizeof(USBD_PIPE_INFORMATION);
if (InterfaceInfo->AlternateSetting && IsSetInterface)
{
}
else
{
- HandleLength = sizeof(USBPORT_INTERFACE_HANDLE) +
- (NumEndpoints - 1) * sizeof(USBPORT_PIPE_HANDLE);
+ HandleLength = FIELD_OFFSET(USBPORT_INTERFACE_HANDLE, PipeHandle) +
+ NumEndpoints * sizeof(USBPORT_PIPE_HANDLE);
InterfaceHandle = ExAllocatePoolWithTag(NonPagedPool,
HandleLength,
{
NumberOfPipes = Descriptor->bNumEndpoints;
- Length = sizeof(USBD_INTERFACE_INFORMATION) +
- (NumberOfPipes - 1) * sizeof(USBD_PIPE_INFORMATION);
+ Length = FIELD_OFFSET(USBD_INTERFACE_INFORMATION, Pipes) +
+ NumberOfPipes * sizeof(USBD_PIPE_INFORMATION);
if (InterfaceInfo->Length >= Length)
{