亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hid.c

?? 一個類似windows
?? C
字號:
/*
 * ReactOS Hid User Library
 * Copyright (C) 2004-2005 ReactOS Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
/* $Id: hid.c 21259 2006-03-08 23:18:27Z audit $
 *
 * PROJECT:         ReactOS Hid User Library
 * FILE:            lib/hid/hid.c
 * PURPOSE:         ReactOS Hid User Library
 * PROGRAMMER:      Thomas Weidenmueller <w3seek@reactos.com>
 *
 * UPDATE HISTORY:
 *      07/12/2004  Created
 */
#include <precomp.h>

HINSTANCE hDllInstance;

/* device interface GUID for HIDClass devices */
const GUID HidClassGuid = {0x4D1E55B2, 0xF16F, 0x11CF, {0x88,0xCB,0x00,0x11,0x11,0x00,0x00,0x30}};

BOOL STDCALL
DllMain(HINSTANCE hinstDLL,
        DWORD dwReason,
        LPVOID lpvReserved)
{
  switch(dwReason)
  {
    case DLL_PROCESS_ATTACH:
      hDllInstance = hinstDLL;
      break;
    
    case DLL_THREAD_ATTACH:
      break;
    
    case DLL_THREAD_DETACH:
      break;
    
    case DLL_PROCESS_DETACH:
      break;
  }
  return TRUE;
}


/*
 * HidD_FlushQueue							EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_FlushQueue(IN HANDLE HidDeviceObject)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_FLUSH_QUEUE,
                         NULL, 0,
                         NULL, 0,
                         &RetLen, NULL);
}


/*
 * HidD_FreePreparsedData						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_FreePreparsedData(IN PHIDP_PREPARSED_DATA PreparsedData)
{
  return (LocalFree((HLOCAL)PreparsedData) == NULL);
}


/*
 * HidD_GetAttributes							EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetAttributes(IN HANDLE HidDeviceObject,
                   OUT PHIDD_ATTRIBUTES Attributes)
{
  HID_COLLECTION_INFORMATION hci;
  DWORD RetLen;
  
  if(!DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_INFORMATION,
                                       NULL, 0,
                                       &hci, sizeof(HID_COLLECTION_INFORMATION),
                                       &RetLen, NULL))
  {
    return FALSE;
  }
  
  /* copy the fields */
  Attributes->Size = sizeof(HIDD_ATTRIBUTES);
  Attributes->VendorID = hci.VendorID;
  Attributes->ProductID = hci.ProductID;
  Attributes->VersionNumber = hci.VersionNumber;
  
  return TRUE;
}


/*
 * HidP_GetButtonCaps							EXPORTED
 *
 * @implemented
 */
HIDAPI
NTSTATUS DDKAPI
HidP_GetButtonCaps(IN HIDP_REPORT_TYPE ReportType,
                   OUT PHIDP_BUTTON_CAPS ButtonCaps,
                   IN OUT PULONG ButtonCapsLength,
                   IN PHIDP_PREPARSED_DATA PreparsedData)
{
  return HidP_GetSpecificButtonCaps(ReportType, 0, 0, 0, ButtonCaps,
                                    ButtonCapsLength, PreparsedData);
}


/*
 * HidD_GetFeature							EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetFeature(IN HANDLE HidDeviceObject,
                OUT PVOID ReportBuffer,
                IN ULONG ReportBufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_FEATURE,
                         NULL, 0,
                         ReportBuffer, ReportBufferLength,
                         &RetLen, NULL);
}


/*
 * HidD_GetHidGuid							EXPORTED
 *
 * @implemented
 */
HIDAPI
VOID DDKAPI
HidD_GetHidGuid(OUT LPGUID HidGuid)
{
  *HidGuid = HidClassGuid;
}


/*
 * HidD_GetInputReport							EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetInputReport(IN HANDLE HidDeviceObject,
                    IN OUT PVOID ReportBuffer,
                    IN ULONG ReportBufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_INPUT_REPORT,
                         NULL, 0,
                         ReportBuffer, ReportBufferLength,
                         &RetLen, NULL);
}


/*
 * HidD_GetManufacturerString						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetManufacturerString(IN HANDLE HidDeviceObject,
                           OUT PVOID Buffer,
                           IN ULONG BufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_MANUFACTURER_STRING,
                         NULL, 0,
                         Buffer, BufferLength,
                         &RetLen, NULL);
}


/*
 * HidD_GetNumInputBuffers						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetNumInputBuffers(IN HANDLE HidDeviceObject,
                        OUT PULONG NumberBuffers)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS,
                         NULL, 0,
                         NumberBuffers, sizeof(ULONG),
                         &RetLen, NULL);
}


/*
 * HidD_GetPhysicalDescriptor						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetPhysicalDescriptor(IN HANDLE HidDeviceObject,
                           OUT PVOID Buffer,
                           IN ULONG BufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_GET_PHYSICAL_DESCRIPTOR,
                         NULL, 0,
                         Buffer, BufferLength,
                         &RetLen, NULL);
}


/*
 * HidD_GetPreparsedData						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetPreparsedData(IN HANDLE HidDeviceObject,
                      OUT PHIDP_PREPARSED_DATA *PreparsedData)
{
  HID_COLLECTION_INFORMATION hci;
  DWORD RetLen;
  BOOL Ret;
  
  if(PreparsedData == NULL)
  {
    return FALSE;
  }
  
  if(!DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_INFORMATION,
                                       NULL, 0,
                                       &hci, sizeof(HID_COLLECTION_INFORMATION),
                                       &RetLen, NULL))
  {
    return FALSE;
  }
  
  *PreparsedData = LocalAlloc(LHND, hci.DescriptorSize);
  if(*PreparsedData == NULL)
  {
    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
    return FALSE;
  }
  
  Ret = DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_DESCRIPTOR,
                        NULL, 0,
                        *PreparsedData, hci.DescriptorSize,
                        &RetLen, NULL);

  if(!Ret)
  {
    /* FIXME - Free the buffer in case we failed to get the descriptor? */
    LocalFree((HLOCAL)*PreparsedData);
  }
#if 0
  else
  {
    /* should we truncate the memory in case RetLen < hci.DescriptorSize? */
  }
#endif

  return Ret;
}


/*
 * HidD_GetProductString						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetProductString(IN HANDLE HidDeviceObject,
                      OUT PVOID Buffer,
                      IN ULONG BufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_PRODUCT_STRING,
                         NULL, 0,
                         Buffer, BufferLength,
                         &RetLen, NULL);
}


/*
 * HidD_GetSerialNumberString						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_GetSerialNumberString(IN HANDLE HidDeviceObject,
                           OUT PVOID Buffer,
                           IN ULONG BufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_SERIALNUMBER_STRING,
                         NULL, 0,
                         Buffer, BufferLength,
                         &RetLen, NULL);
}


/*
 * HidP_GetValueCaps							EXPORTED
 *
 * @implemented
 */
HIDAPI
NTSTATUS DDKAPI
HidP_GetValueCaps(IN HIDP_REPORT_TYPE ReportType,
                  OUT PHIDP_VALUE_CAPS ValueCaps,
                  IN OUT PULONG ValueCapsLength,
                  IN PHIDP_PREPARSED_DATA PreparsedData)
{
  return HidP_GetSpecificValueCaps(ReportType, 0, 0, 0, ValueCaps,
                                   ValueCapsLength, PreparsedData);
}


/*
 * HidD_Hello								EXPORTED
 *
 * Undocumented easter egg function. It fills the buffer with "Hello\n"
 * and returns number of bytes filled in (lstrlen(Buffer) + 1 == 7)
 *
 * Bugs: - doesn't check Buffer for NULL
 *       - always returns 7 even if BufferLength < 7 but doesn't produce a buffer overflow
 *
 * @implemented
 */
HIDAPI
ULONG DDKAPI
HidD_Hello(OUT PCHAR Buffer,
           IN ULONG BufferLength)
{
  const CHAR HelloString[] = "Hello\n";
  
  if(BufferLength > 0)
  {
    memcpy(Buffer, HelloString, min(sizeof(HelloString), BufferLength));
  }
  
  return sizeof(HelloString);
}


/*
 * HidD_SetFeature							EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_SetFeature(IN HANDLE HidDeviceObject,
                IN PVOID ReportBuffer,
                IN ULONG ReportBufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_SET_FEATURE,
                         ReportBuffer, ReportBufferLength,
                         NULL, 0,
                         &RetLen, NULL);
}


/*
 * HidD_SetNumInputBuffers						EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_SetNumInputBuffers(IN HANDLE HidDeviceObject,
                        IN ULONG NumberBuffers)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_SET_NUM_DEVICE_INPUT_BUFFERS,
                         &NumberBuffers, sizeof(ULONG),
                         NULL, 0,
                         &RetLen, NULL);
}


/*
 * HidD_SetOutputReport							EXPORTED
 *
 * @implemented
 */
HIDAPI
BOOLEAN DDKAPI
HidD_SetOutputReport(IN HANDLE HidDeviceObject,
                     IN PVOID ReportBuffer,
                     IN ULONG ReportBufferLength)
{
  DWORD RetLen;
  return DeviceIoControl(HidDeviceObject, IOCTL_HID_SET_OUTPUT_REPORT,
                         ReportBuffer, ReportBufferLength,
                         NULL, 0,
                         &RetLen, NULL);
}

/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产资源精品在线观看| 亚洲国产日韩a在线播放性色| 中文字幕制服丝袜成人av | 蜜臀av性久久久久蜜臀aⅴ流畅| 精品一区二区三区日韩| 成人av电影在线网| 欧美四级电影在线观看| 欧美一卡2卡3卡4卡| 中文乱码免费一区二区| 亚洲1区2区3区视频| 国产精品白丝jk白祙喷水网站| 91久久奴性调教| 久久亚洲一级片| 亚洲综合999| 国产一区二区女| 欧美视频中文字幕| 国产欧美一区二区精品性| 亚洲精品中文在线影院| 麻豆91在线播放免费| 99riav久久精品riav| 欧美电视剧免费全集观看| 国产精品国产三级国产普通话蜜臀 | 日韩高清在线不卡| 成人精品国产一区二区4080| 这里只有精品99re| 亚洲视频1区2区| 国内精品免费**视频| 欧美三级视频在线| 亚洲国产精品传媒在线观看| 美女脱光内衣内裤视频久久网站| 一本色道a无线码一区v| 国产午夜精品在线观看| 日韩国产精品久久久久久亚洲| av在线这里只有精品| 精品国产乱码久久久久久免费| 亚洲国产精品尤物yw在线观看| 成人性生交大片免费看在线播放| 欧美一区二区福利视频| 亚洲精品成人少妇| 成人免费高清在线观看| 精品噜噜噜噜久久久久久久久试看| 亚洲综合在线视频| 成人av高清在线| 国产婷婷色一区二区三区| 日精品一区二区| 在线视频一区二区免费| 亚洲欧美自拍偷拍| 国产91精品欧美| 26uuu另类欧美亚洲曰本| 日韩av在线发布| 69堂成人精品免费视频| 亚洲一区二区三区影院| 97精品久久久午夜一区二区三区| 国产片一区二区| 国产美女精品在线| 精品国产一区二区精华| 美国一区二区三区在线播放| 欧美一区二区三区免费大片 | 欧美熟乱第一页| 一级做a爱片久久| 色综合中文字幕国产 | 成人的网站免费观看| 久久蜜臀精品av| 黄色资源网久久资源365| 欧美一区二区三区在线观看| 五月开心婷婷久久| 欧美精品xxxxbbbb| 丝袜脚交一区二区| 欧美日本视频在线| 日韩电影在线免费| 欧美一区二区三区免费观看视频| 日本成人在线电影网| 在线综合亚洲欧美在线视频| 日本不卡123| 精品久久免费看| 国产在线不卡视频| 国产欧美中文在线| 99热99精品| 亚洲综合成人在线视频| 欧美日韩三级一区| 人禽交欧美网站| 精品国产一区a| 国产成人av自拍| 国产精品久久久久aaaa| 色综合天天性综合| 亚洲高清久久久| 777午夜精品视频在线播放| 亚洲视频一区二区在线| 91黄色激情网站| 午夜av区久久| 久久精品国产秦先生| 国产精品麻豆网站| 884aa四虎影成人精品一区| 成人app软件下载大全免费| 一区二区三区高清| 欧美激情一区二区三区不卡| 欧美日韩午夜在线| 一本一道久久a久久精品 | 亚洲一级二级在线| 7777精品伊人久久久大香线蕉的| 麻豆精品视频在线观看免费| 欧美精品一区二区三区在线| 粉嫩在线一区二区三区视频| 亚洲伦理在线免费看| 欧美美女bb生活片| 国产在线视视频有精品| 国产精品另类一区| 精品1区2区3区| 精品一区中文字幕| 亚洲视频你懂的| 欧美一级久久久| 成人h精品动漫一区二区三区| 亚洲在线观看免费| 精品国产乱码久久久久久久久| 成人午夜免费av| 性做久久久久久免费观看| 欧美精品一区二区三区高清aⅴ | 亚洲综合免费观看高清完整版| 欧美一区二区久久| 粉嫩aⅴ一区二区三区四区五区 | 欧美理论在线播放| 国产精品一卡二卡| 亚洲一区二区在线观看视频| 精品粉嫩超白一线天av| 91在线精品一区二区| 美女视频一区二区三区| 亚洲色大成网站www久久九九| 欧美一区二区三区在线观看视频| 成人久久18免费网站麻豆| 日韩电影免费在线| 国产精品传媒在线| 日韩一级大片在线| 色婷婷狠狠综合| 国产成人综合亚洲网站| 亚洲国产精品麻豆| 国产女同性恋一区二区| 91精品国产综合久久香蕉麻豆| av资源网一区| 久久精品国产精品亚洲红杏| 亚洲一区在线观看网站| 国产嫩草影院久久久久| 欧美va亚洲va在线观看蝴蝶网| 在线观看亚洲一区| va亚洲va日韩不卡在线观看| 国产在线精品免费av| 亚洲大尺度视频在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 欧美日韩国产一二三| 色综合婷婷久久| 成人免费视频视频在线观看免费 | 国产亚洲欧美激情| 3atv在线一区二区三区| 91美女视频网站| 懂色av噜噜一区二区三区av | 国产欧美一区二区三区在线看蜜臀 | 国产精品污www在线观看| 日韩三级.com| 欧美精品色综合| 欧美午夜精品一区二区蜜桃| 91视频国产资源| 99久久综合国产精品| 黑人精品欧美一区二区蜜桃| 日韩精品一二三| 午夜av一区二区三区| 亚洲成va人在线观看| 亚洲精品视频在线观看免费 | 色综合婷婷久久| 99久久精品国产导航| 成人永久免费视频| 国产精品1024| 国产精品一区免费视频| 国产真实乱子伦精品视频| 免费高清成人在线| 男女性色大片免费观看一区二区 | 久久久久国产精品人| 久久人人超碰精品| 精品国产欧美一区二区| 欧美成人精品1314www| 精品人伦一区二区色婷婷| 日韩美女在线视频| 欧美成人综合网站| 亚洲精品一区二区三区四区高清| 欧美岛国在线观看| 久久新电视剧免费观看| 久久精品人人做人人爽97| 久久精品在线免费观看| 国产精品素人视频| 最新成人av在线| 亚洲精品乱码久久久久| 亚洲一区二区三区四区不卡| 午夜精品久久一牛影视| 免费观看一级欧美片| 国产在线精品一区二区夜色| 国产伦精品一区二区三区免费迷| 国产高清久久久| av福利精品导航| 欧洲精品在线观看| 91精品国模一区二区三区| 2024国产精品| 国产精品免费丝袜|