Drivers Hybrinix Laptops & Desktops



-->

The section includes the following topics about the operation of the HID class driver:

RCD = Registering Clock Driver; DB = Data Buffer; FDHS = Full DIMM Heat Spreader; T0: TS / NF: Integrated TS w/o FDHS: T1: TS / NH / Montage: Int. TS w/o FDHS, Montage RCD B1 / DB A1: T2: TS / NH / Montage: Int. TS w/o FDHS, Montage RCD C0 / DB B0: T3: TS / NH / Montage: Int. TS w/o FDHS, Montage RCD A0 / TBD: T7: TS / NH / TI: Int. Tips for better search results. Ensure correct spelling and spacing - Examples: 'paper jam' Use product model name: - Examples: laserjet pro p1102, DeskJet 2130 For HP products a product number. Examples: LG534UA For Samsung Print products, enter the M/C.

  • Operational features of the HID class driver
  • Binding the operation of the HID class driver to a HID minidriver
  • Communicating with a HID minidriver

See Creating WDF HID minidrivers for more information.

Operational features of the HID class driver

The HID class driver does the following:

  • Provides and manages the upper-level interface that kernel-mode drivers and user-mode applications use to access the HID collections that an input device supports.

    The HID class driver transparently manages and routes all communication between upper-level drivers and applications and the underlying input devices that support HID collections. It manages the different data protocols that are used by different input devices and input queues that support more than one open file on the same HID collection.

    The upper-level interface to HID collections consists of the HID class driver IOCTLs, the HIDClass support routines, and the HIDClass structures.

  • Communicates with a HID minidriver by calling the minidriver's standard driver routines.

  • Creates a functional device object (FDO) for HIDClass input devices enumerated by a lower-level bus or port driver.

    For example, the HID class driver creates and manages the operations of an FDO that represents a USB HID device enumerated by the system-supplied USB driver stack.

  • Provides the functionality of a bus driver for the child devices (HID collections) supported by an underlying input device.

    The HID class driver creates a physical device object (PDO) for each HID collection supported by an input device and manages the collection's operation.

Binding a minidriver to HIDClass

A HID minidriver binds its operation to the HID class driver by calling HidRegisterMinidriver to register itself with the HID class driver. The registration operation does the following:

  • Saves a copy of the entry points (pointers) to the HID minidriver's standard driver routines in the HID class driver's device extension.

    A HID minidriver sets its entry points in the driver object that the minidriver receives as input to its DriverEntry routine. The HID minidriver sets these entry points before it registers with the HID class driver.

  • Resets the entry points in the minidriver's driver object to the entry points for the standard driver routines supplied by the HID class driver.

The HID class driver supplies the following standard driver routines:

  • AddDevice and Unload routines

  • Dispatch routines for the following I/O requests:

The registration process also allocates memory for the HID mindriver device extension. Although the memory is allocated by the HID class driver, only the HID minidriver uses this device extension.

Communicating with a HID minidriver

The HID class driver communicates with a HID minidriver by calling the HID minidriver's AddDevice, Unload, and dispatch routines as follows:

Calling the AddDevice Routine

Drivers Hybrinix Laptops & Desktops Computers

When the HID class driver's AddDevice routine is called to create a functional device object (FDO), the HID class driver creates the FDO, initializes it, and calls the HID minidriver AddDevice routine. The HID minidriver AddDevice routine does internal device-specific initialization and, if successful, returns STATUS_SUCCESS. If the HID minidriver AddDevice routine is not successful, the HID class driver deletes the FDO and returns the status returned by the HID minidriver AddDevice routine.

Calling the Unload Routine

When the HID class driver Unload routine is called, the HID class driver completes releasing all resources associated with FDO and calls the HID minidriver's Unload routine.

Drivers Hybrinix Laptops & Desktops Refurbished

Calling the Dispatch Routines

To operate a device, the HID class driver primarily calls the HID minidriver dispatch routine for internal device control requests.

In addition, when the I/O manager sends Plug and Play, power, or system control requests to the HID class driver for an FDO, the HID class driver processes the request, and calls the HID minidriver's corresponding dispatch routine.

The HID class driver does not send the following requests to the HID minidriver: create, close, or device control.

Operation of a HID minidriver

A HID transport minidriver abstracts the operation of a hardware bus or port that your input device attaches to.

Laptops

HID minidrivers can be built using one of the following frameworks:

  • UMDF – User Mode Driver Framework
  • KDMF – Kernel Mode Driver Framework
  • WDM – Legacy Windows Driver Model

Microsoft recommends using a Frameworks based solution (KMDF or UMDF (on Windows 8 only)). For more information on each of the driver models, please visit the following sections:

  • KMDF-based HID minidriver, see Creating Framework-based HID Minidrivers
  • UMDF-based HID minidriver, see Creating UMDF-based HID Minidrivers

The following section talks about registering a WDM based HID Minidriver but much of it is pertinent to a KMDF based Frameworks driver also. All HID minidriver must register with the HID class driver, and the HID class driver communicates with the minidriver by calling the minidriver's standard driver routines.

For more information about the functionality that a HID minidriver must support in its standard driver routines, see the following topics:

  • Registering a HID Minidriver
  • HID Minidriver Driver Extension
  • Using the HID_DEVICE_EXTENSION Structure
  • Standard Driver Routines Provided by a HID Minidriver

For more information about the HID class driver, see Operation of the HID Class Driver

Registering a HID minidriver

After a HID minidriver completes all other driver initialization in its DriverEntry routine, the HID minidriver binds its operation to the HID class driver by calling HidRegisterMinidriver.

When the HID minidriver registers with the HID class driver, it uses a HID_MINIDRIVER_REGISTRATION structure to specify the following: HID revision, the HID minidriver driver object, the size of a HID minidriver device extension, and whether devices are polled or not.

Refurbished

HID minidriver extension

A HID minidriver device extension is device-specific, and is only used by a HID minidriver. The HID class driver allocates the memory for the minidriver device extension when the class driver creates its device extension for a functional device object (FDO). The HID minidriver specifies the size of its device extension when it registers the minidriver with the HID class driver. The size is specified by the DeviceExtensionSize member of a HID_MINIDRIVER_REGISTRATION structure.

Using the HID_DEVICE_EXTENSION structure

A HID minidriver must use a HID_DEVICE_EXTENSION structure as the layout for the device extension created by the HID class driver for a functional device object (FDO). The HID class driver sets the members of this structure when it initializes the FDO. A HID minidriver must not change the information in this structure.

A HID_DEVICE_EXTENSION structure contains the following members:

  • PhysicalDeviceObject is a pointer to the physical device object (PDO) that represents the underlying input device.

  • NextDeviceObject is a pointer to the top of the device stack beneath the FDO.

  • MiniDeviceExtension is a pointer to the HID minidriver device extension.

Given a pointer to the FDO of an input device, the following GET_MINIDRIVER_DEVICE_EXTENSION macro returns a pointer to a HID minidriver extension:

PDEVICE_EXTENSION is a pointer to a device-specific device extension declared by a HID minidriver.

Similarly, a HID minidriver can obtain a pointer to the input device's PDO and the top of the device stack beneath the input device's FDO.

When a HID minidriver sends an IRP down the device stack, it should use NextDeviceObject as the target device object.

Standard minidriver routines

A HID minidriver must provide the following standard driver support routines:

  • HID Minidriver DriverEntry Routine
  • HID Minidriver AddDevice Routine
  • HID Minidriver Unload Routine

A HID minidriver must also support the dispatch routines described in Dispatch Routines Provided by a HID Minidriver.

DriverEntry routine

The DriverEntry routine in a HID minidriver does the following:

  • Creates a driver object for the linked pair of drivers (HID class driver and a HID minidriver).

  • Sets the required driver entry points in the HID minidriver driver object.

  • Calls HidRegisterMinidriver to register the HID minidriver with the HID class driver.

  • Does device-specific configurations that are only used by the HID minidriver.

AddDevice routine

The HID class driver handles creating and initializing the functional device object (FDO) for an underlying input device. The HID class driver also operates the FDO from the perspective of the upper-level interface to the underlying device and its child devices (HID collections).

The HID class driver AddDevice routine calls the HID minidriver AddDevice routine so that the minidriver can do internal device-specific initialization.

The parameters that are passed to the HID minidriver AddDevice routine are the minidriver driver object and the FDO. (Note that the HID class driver passes the FDO to the minidriver AddDevice routine, not to the physical device object for the underlying input device.)

The HID minidriver AddDevice routine obtains a pointer to the minidriver device extension from the FDO.

  • Typically, the HID minidriver AddDevice routine does the following:

  • Initializes the minidriver device extension. The device extension is only used by the minidriver.

  • Returns STATUS_SUCCESS. If the minidriver returns an error status, the HID class driver deletes the FDO and returns the error status to the Plug and Play manager.

Unload routine

The Unload routine of the HID class driver calls the HID minidriver Unload routine. A HID minidriver releases any internal resources allocated by the minidriver.

Dispatch routines

A HID minidriver must supply the following dispatch routines: create, close, internal device control, system control, Plug and Play, and power management. Except for internal device control requests, most of these dispatch routines provide minimal function. When the HID class driver calls these dispatch routines, it passes the minidriver driver object and the functional device object (FDO).

IRP_MJ_CREATE

In compliance with WDM requirements, the HID class driver and a HID minidriver provide a dispatch routine for create requests. However, the FDO cannot be opened. The HID class driver returns STATUS_UNSUCCESSFUL.

A HID minidriver only needs to provide a stub. The create dispatch routine is never called.

IRP_MJ_CLOSE

In compliance with WDM requirements, the HID class driver and a HID minidriver must provide a dispatch routine for close requests. However, the FDO cannot be opened. The HID class driver returns STATUS_INVALID_PARAMETER_1.

A HID minidriver only needs to provide a stub. The close dispatch routine is never called.

IRP_MJ_DEVICE_CONTROL

A HID minidriver does not need a dispatch routine for device control requests. The HID class driver does not pass device control requests to a minidriver.

IRP_MJ_INTERNAL_DEVICE_CONTROL

A HID minidriver must provide a dispatch routine for internal device control requests that supports the requests described in HID MinidriverIOCTLs.

The HID class driver primarily uses internal device control requests to access the underlying input device.

The HID minidriver handles these requests in a device-specific way.

IRP_MJ_SYSTEM_CONTROL

A HID minidriver must provide a dispatch routine for system control requests. However, a HID minidriver is only required to pass system control requests down the device stack as follows:

  • Skip the current IRP stack location

  • Send the request down the FDO's device stack

IRP_MJ_PNP

A HID minidriver must supply a dispatch routine for Plug and Play requests.

Drivers Hybrinix Laptops & Desktops Best Buy

The HID class driver does all the Plug and Play processing associated with the FDO. When the HID class driver processes a Plug and Play request, it calls the HID minidriver Plug and Play dispatch routine.

A HID minidriver Plug and Play dispatch routine does the following:

  • Handles sending the request down the FDO's device stack and completing the request on the way back up the device stack, as appropriate for each type of request.

  • Does device-specific processing associated with certain requests to update information about the state of the FDO.

    For example, the minidriver might update the Plug and Play state of the FDO (in particular, whether the FDO is started, stopped, or in the process of being removed).

IRP_MJ_POWER

The HID minidriver must supply a dispatch routine for power requests. However, the HID class driver handles the power processing for the FDO.

In compliance with WDM requirements, a HID minidriver sends power requests down the FDO's device stack in the following way:

  • Skips the current IRP stack location

  • Starts the next power IRP

  • Sends the power IRP down the FDO's device stack

Typically, the HID minidriver passes power requests down the device stack without additional processing.

Below are steps users can follow to help speed up a computer or determine why a computer is running slow. It should be noted that this page only covers an overall slow computer and not a computer that starts slow or has a slow Internet connection. To diagnose those issues, visit the following pages:

Reboot

If your computer has not been rebooted recently, make sure to reboot it before following any of the steps below. Rebooting the computer can fix many problems and is an easy first step.

Background programs

One of the most common reasons for a slow computer is programs running in the background. Remove or disable any TSRs and startup programs that automatically start each time the computer boots.

Tip

To see what programs are running in the background and how much memory and CPU they are using, open Task Manager. If you are running Windows 7 or higher, run Resmon to get a better understanding of how your computer resources are used.

If you have an antivirus scanner on the computer, spyware protection program, or another security utility, make sure it's not scanning your computer in the background. If a scan is in progress, it decreases the overall performance of your computer. If this is the case, allow the scan to complete, and the computer's performance should improve.

Delete temp files

As a computer runs programs, temporary files are stored on the hard drive. Deleting these temp files help improve computer performance.

Windows computers

First, we suggest using the Windows Disk Cleanup utility to delete temporary files and other files no longer needed on the computer.

Unfortunately, the Disk Cleanup may not delete every file in the temp directory. Therefore, we also suggest deleting temporary files manually.

  1. Open the Start menu or and press the Windows key, then type %temp% in the Search field.
Note

In Windows XP and prior, click the Run option in the Start menu and enter %temp% in the Run field.

  1. Press Enter and a Temp folder should open.
  2. You can delete all files found in this folder and, if any files are in use and cannot be deleted, they can be skipped.

Free hard drive space

Verify that there is at least 200-500MB of free hard drive space. This available space allows the computer to have room for the swap file to increase in size and give room for temporary files.

Bad, corrupted or fragmented hard drive

Check the hard drive for errors

On a Windows computer, run ScanDisk, chkdsk, or something equivalent to verify there is nothing physically wrong with the computer's hard drive.

On a macOS computer, access the Disk Utility program, and use the First Aid option to check the hard drive for errors. To open Disk Utility:

  1. Click the Launchpad icon on the dock.
  2. Open the Other folder.
  3. Click Disk Utility to open the program.

Make sure hard drive is not fragmented

Run Defrag to help ensure that data is arranged in the best possible order.

Test hard drive

Use other software tools to test the hard drive for any errors by looking at the SMART of the drive.

Scan for viruses

If your computer is infected with one or more viruses, it may run more slowly. If your computer doesn't have an antivirus program installed, run Trend Micro's free Housecall online utility to scan and remove viruses on your computer. We also recommend you install an antivirus program for active protection against viruses.

Scan for malware

Today, spyware and other malware is a big cause of many computer problems, including slower performance. Even if an antivirus scanner is installed on the computer, we recommend running a malware scan as well. Use the free version of Malwarebytes to scan your computer for malware.

Hardware conflicts

Verify that the Device Manager has no conflicts. If any exist, resolve these issues as they could be causing your problem.

Update the operating system

To update a computer running Microsoft Windows, run Windows Update.

To update a macOS computer, run Software Update. To upgrade the operating system, use the App Store.

Disable browser plug-ins

If your computer runs especially slow when you're using your web browser, considering disabling any browser plug-ins, add-ons, or extensions.

Update your drivers

Make sure you have the latest drivers for your computer hardware, especially the latest video drivers. Having out-of-date drivers can cause an assortment of issues, including slow performance.

Reboot the computer again

After making any of the changes above, reboot your machine.

Run a registry cleaner

Note

If you have a Mac computer, skip this section, as there is no registry in macOS.

We usually do not recommend registry cleaners. However, if you followed all the steps above and your computer is still slow, try running a registry cleaner on the computer.

Memory upgrade

If you have had your computer for more than two years, you may need more memory. Today, we suggest computers have a minimum of 2 GB of memory (RAM) for a 32-bit system and 4 GB for a 64-bit system. By having enough memory for programs to run within memory, your computer doesn't need to swap information stored in memory to the swap file. If the hard drive light is continuously active, it's an indication the computer is frequently swapping information between your memory and hard drive.

Hard drive upgrade

One of the biggest bottlenecks of a computer is the hard disk drive. Upgrading from a standard hard drive to a Solid State Drive (SSD) drastically improves the computer's performance.

Computer or processor is overheating

Make sure your computer and processor is not overheating. Excessive heat can cause a decrease in the computer's performance because most operating systems automatically reduce the speed of the processor to help compensate for heat-related issues.

Dust, dirt, and hair can also constrict proper airflow inside your computer, which causes a computer to overheat. Make sure your computer case is clean, and that the fans are not obstructed.

Increase or upgrade the processor speed

Increasing the speed of the processor (CPU) can improve your computer's performance. There are two options for increasing processor speed: overclocking or upgrading.

Overclocking a processor means increasing its speed beyond what it's designed to run stably. While overclocking can increase the processor speed, the increase is often not very significant, resulting in maybe a 10% or 20% speed increase at most. Furthermore, the processor itself must be capable of being overclocked. You would need to find the specifications for the processor in your computer to determine if it can be overclocked. An overclocked processor generates more heat, thus requiring a more powerful heat sink and fan to pull the excess heat away from the processor.

A safer alternative to overclocking is upgrading the processor in your computer. You would need to get the specifications for your motherboard to determine what type of newer processor may be used in it. You can then install the new processor in place of the existing processor.

Erase computer and start over

If none of the solutions above resolve your issues, another option is to reinstall the operating system, or you can erase everything and start over.

Erasing everything on your computer and reinstalling the operating system can increase performance by getting rid of old software or drivers. Installing a fresh copy of macOS or Windows, software programs, and the latest drivers help verify there are no software related issues causing your computer to be slow.

Hardware issues

Finally, if your computer is still slow after trying the above recommendations, there's likely a more serious hardware related issue (e.g., failing component). Examples of failing hardware could include the hard drive, CPU, RAM, motherboard, or other components.

You can run hardware diagnostic tests using the Ultimate Boot CD (UBCD) utility. This utility provides information on whether or not your computer has a bad piece of hardware.

Old computer

If your computer is more than five years old, it performs slower than a new one. As more advanced software programs are released, they are optimized to run more efficiently on newer computers. Older computers are not able to run these new programs as well, which causes them to perform more slowly. Furthermore, new software tends to be more demanding in general, which is another problem for old hardware. We recommend you consider purchasing a new computer or upgrading your current one.

Additional information

Drivers hybrinix laptops & desktops computers
  • See our slow definition for all links relating to slow computers.