void AndroidUsbDeviceObject::OnGetSerialNumberCtl(WDFREQUEST request, size_t output_buf_len) { ASSERT_IRQL_LOW(); if (NULL == serial_number()) { // There is no serial number saved for this device! WdfRequestComplete(request, STATUS_INTERNAL_ERROR); return; } size_t expected_len = serial_number_byte_len() + sizeof(WCHAR); // Check the buffer first if (output_buf_len >= expected_len) { // Get the output buffer NTSTATUS status; WCHAR* ret_info = reinterpret_cast<WCHAR*>(OutAddress(request, &status)); ASSERT(NT_SUCCESS(status) && (NULL != ret_info)); if (NT_SUCCESS(status)) { // Copy serial number RtlCopyMemory(ret_info, serial_number(), serial_number_byte_len()); ret_info[serial_number_char_len()] = L'\0'; WdfRequestCompleteWithInformation(request, STATUS_SUCCESS, expected_len); } else { WdfRequestComplete(request, status); } } else { WdfRequestCompleteWithInformation(request, STATUS_BUFFER_TOO_SMALL, sizeof(expected_len)); } }
/* * Return information about the subject */ std::vector<std::string> X509_Certificate::subject_info(const std::string& req) const { if(req == "Email") return this->subject_info("RFC822"); if(subject_dn().has_field(req)) return subject_dn().get_attribute(req); if(subject_alt_name().has_field(req)) return subject_alt_name().get_attribute(req); // These will be removed later: if(req == "X509.Certificate.v2.key_id") return {hex_encode(this->v2_subject_key_id())}; if(req == "X509v3.SubjectKeyIdentifier") return {hex_encode(this->subject_key_id())}; if(req == "X509.Certificate.dn_bits") return {hex_encode(this->raw_subject_dn())}; if(req == "X509.Certificate.start") return {not_before().to_string()}; if(req == "X509.Certificate.end") return {not_after().to_string()}; if(req == "X509.Certificate.version") return {std::to_string(x509_version())}; if(req == "X509.Certificate.serial") return {hex_encode(serial_number())}; return data().m_subject_ds.get(req); }
void enable_device(rs2::device dev) { std::string serial_number(dev.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER)); std::lock_guard<std::mutex> lock(_mutex); if (_devices.find(serial_number) != _devices.end()) { return; //already in } // Ignoring platform cameras (webcams, etc..) if (platform_camera_name == dev.get_info(RS2_CAMERA_INFO_NAME)) { return; } // Create a pipeline from the given device rs2::pipeline p; rs2::config c; c.enable_device(serial_number); // Start the pipeline with the configuration rs2::pipeline_profile profile = p.start(c); // Hold it internally _devices.emplace(serial_number, view_port{ {},{},{}, p, profile }); }
/* * DER encode a CRL_Entry */ void CRL_Entry::encode_into(DER_Encoder& der) const { der.start_cons(SEQUENCE) .encode(BigInt::decode(serial_number())) .encode(expire_time()) .start_cons(SEQUENCE) .encode(extensions()) .end_cons() .end_cons(); }
NTSTATUS AndroidUsbDeviceObject::OnEvtDevicePrepareHardware( WDFCMRESLIST resources_raw, WDFCMRESLIST resources_translated) { ASSERT_IRQL_PASSIVE(); // Create a USB device handle so that we can communicate with the underlying // USB stack. The wdf_target_device_ handle is used to query, configure, and // manage all aspects of the USB device. These aspects include device // properties, bus properties, and I/O creation and synchronization. This // call gets the device and configuration descriptors and stores them in // wdf_target_device_ object. NTSTATUS status = WdfUsbTargetDeviceCreate(wdf_device(), WDF_NO_OBJECT_ATTRIBUTES, &wdf_target_device_); ASSERT(NT_SUCCESS(status) && (NULL != wdf_target_device_)); if (!NT_SUCCESS(status)) return status; // Retrieve USBD version information, port driver capabilites and device // capabilites such as speed, power, etc. WDF_USB_DEVICE_INFORMATION_INIT(&usb_device_info_); status = WdfUsbTargetDeviceRetrieveInformation(wdf_target_device(), &usb_device_info_); ASSERT(NT_SUCCESS(status)); if (!NT_SUCCESS(status)) return status; WdfUsbTargetDeviceGetDeviceDescriptor(wdf_target_device(), &usb_device_descriptor_); #if DBG PrintUsbTargedDeviceInformation(usb_device_info()); PrintUsbDeviceDescriptor(&usb_device_descriptor_); #endif // DBG // Save device serial number status = WdfUsbTargetDeviceAllocAndQueryString(wdf_target_device(), WDF_NO_OBJECT_ATTRIBUTES, &serial_number_handle_, &serial_number_char_len_, usb_device_descriptor_.iSerialNumber, 0x0409); // English (US) if (!NT_SUCCESS(status)) return status; #if DBG UNICODE_STRING ser_num; ser_num.Length = serial_number_byte_len(); ser_num.MaximumLength = ser_num.Length; ser_num.Buffer = const_cast<WCHAR*> (serial_number()); GoogleDbgPrint("\n*** Device serial number %wZ", &ser_num); #endif // DBG // Configure our device now status = ConfigureDevice(); ASSERT(NT_SUCCESS(status)); if (!NT_SUCCESS(status)) return status; // Select device interfaces status = SelectInterfaces(); if (!NT_SUCCESS(status)) return status; return status; }