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

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

?? mckernel.h

?? 美國Delta Tau公司PMAC多軸運動控制卡的VC++示例程序
?? H
?? 第 1 頁 / 共 2 頁
字號:
/*
 * mckernel.h
 *
 * 32-bit Motion Control Device Driver
 *
 * Definition of interface between hardware-specific portions of
 * kernel driver and the helper library mckernel.lib
 *
 * The hardware-specific portion of a motion control driver will
 * have an NT-specific DriverEntry function that will call Init()
 * to initialise the helper library after performing hardware detect and
 * initialise. All NT interaction will then be done by the library mckernel.lib
 * calling back to the hardware-specific code only through the dispatch
 * table below.
 *
 * All h/w specific functions are given a pointer to a PDEVICE_INFO structure
 * which they can pass to Inp(), Outp(). GetHWInfo() will return a
 * pointer to the hardware-specific data structure requested from Init().
 *
 */

#ifndef _MCKERNEL_
  #define _MCKERNEL_

/* include necessary headers so that hardware-specific callers do not
 * explicitly reference NT-specific headers.
 */

  #if defined(_NT)
    #include <ntddk.h>
  #else
typedef long NTSTATUS;
  #endif

  #include <windef.h>
  #include <mcstruct.h>
  #include <mioctl.h>

#ifdef _OLD_DLL
  #define PT_PMAC1  1
  #define PT_PMAC2  2
  #define PT_PMACUL 3
  #define PT_PMAC   4
  #define PT_PMAC1T 5
  #define PT_PMAC2T 6
  #define PT_PMACUT 7
  #define PT_UMAC   8
#endif

/*****************************************************************************
 * hardware-independent device-extension data structure - opaque to
 * h/w specific functions.
*****************************************************************************/
typedef struct _DEVICE_INFO DEVICE_INFO, *PDEVICE_INFO;

/*****************************************************************************
 Callbacks to h/w specific code

 These are the hardware-specific functions called from the dispatcher
*****************************************************************************/
typedef struct __CALLBACK
{
  // called on device open/close - optional routines
  BOOLEAN (*DeviceOpenFunc)(PDEVICE_INFO);
  BOOLEAN (*DeviceCloseFunc)(PDEVICE_INFO);
  BOOLEAN (*InterruptInitFunc)(PDEVICE_INFO pDevInfo, ULONG interruptMask);
  BOOLEAN (*InterruptTermFunc)(PDEVICE_INFO);

  // returns TRUE if Interrupt needs Service
  ULONG   (*InterruptAcknowledge)(PDEVICE_INFO);

  // called on driver-unload
  BOOLEAN (*CleanupFunc)(PDEVICE_INFO);

} _CALLBACK, * P_CALLBACK;

/*****************************************************************************

 Support functions for NT
*****************************************************************************/
  #if defined(_NT)
/*
 * PmacCreateDevice
 *
 * Create the device object, and any necessary related setup, and
 * allocate device extension data. The device extension data is
 * a DEVICE_INFO struct plus however much data the caller wants for
 * hardware-specific data.
 *
 * parameters:
 *  pDriverObject - pointer to driver object (arg to DriverEntry)
 *  RegistryPathName - entry for this driver in registry (arg to DriverEntry)
 *  HWInfoSize - amount of data to allocate at end of DeviceExtension
 *  DeviceNumber - the nth Pmac to create a device object for
 *
 * returns pointer to device extension data as DEVICE_INFO struct.
 */
PDEVICE_OBJECT
  PmacCreateDevice(
      PDRIVER_OBJECT  pDriverObject,
      PUNICODE_STRING RegistryPathName,
      ULONG           HWInfoSize,
    UCHAR           DeviceNumber);

PDEVICE_INFO PmacDeleteDevice(PDRIVER_OBJECT  pDriverObject,PDEVICE_INFO pDevInfo);

/*
 * GetResources
 *
 * map port and frame buffer into system address space or i/o space, and
 * report resource usage of the ports, interrupt and physical memory
 * address used.
 *
 * Note: We do not connect the interrupt: this is not done until
 * a subsequent call to ConnectInterrupt(). We do, however, report
 * usage of the interrupt.
 *
 * we return TRUE if success, or FALSE if we couldn't get the resources.
 */
BOOLEAN
  GetResources(
      PDEVICE_INFO pDevInfo,
      PDRIVER_OBJECT pDriverObject,
      DWORD  PortBase,
      ULONG   NrOfPorts,
      ULONG   Interrupt,
      BOOLEAN bLatched,
      DWORD   FrameBuffer);

// the dispatch routine to which all IRPs go
NTSTATUS Dispatch(
    IN PDEVICE_OBJECT pDeviceObject,
    IN PIRP pIrp
);


// cancel routine - set as cancel routine for pending irps (wait-error
// or add-buffer). Called to de-queue and complete them if cancelled.
VOID Cancel(
    IN PDEVICE_OBJECT pDeviceObject,
    IN PIRP pIrp
);

// call to unload or abort load of the driver
VOID Cleanup(PDRIVER_OBJECT pDriverObject);

/* interrupt service routine - returns TRUE if interrupt handled.
 * all interrupts come in here and are then dispatched to hw ack routine
 * the Context pointer is a pointer to DEVICE_INFO.
 */
BOOLEAN
  InterruptService(
      IN PKINTERRUPT pInterruptObject,
      IN PVOID Context
  );

/*
 * DPC routine scheduled in MC_InterruptService.
 */
VOID
  Deferred(
      PKDPC pDpc,
      PDEVICE_OBJECT pDeviceObject,
      PIRP pIrpNotUsed,
      PVOID Context
  );

/*
 * extract the next item from a cancellable queue of irps
 * if bCancelHeld is true, then we already hold the cancel spinlock so we
 * should not try to get it
 */
PIRP
  ExtractNextIrp(
      PLIST_ENTRY pQueueHead,
      BOOLEAN bCancelHeld
  );

/*
 * extract a specific IRP from the given queue, while possibly holding the
 * cancel spinlock already.
 */
PIRP
  ExtractThisIrp(
      PLIST_ENTRY pHead,
      PIRP pIrpToFind,
      BOOLEAN bCancelHeld
  );

/*
 * interlocked queue access functions
 */
/*
 * QueueRequest
 *
 * Add an irp to a cancellable queue.
 * Check the cancel flag and return FALSE if cancelled.
 * otherwise set the cancel routine and add to queue.
 *
 */
BOOLEAN
  QueueRequest(
      PIRP pIrp,
      PLIST_ENTRY pQueueHead,
      PDRIVER_CANCEL pCancelFunc
  );

/*
 * ReplaceRequest
 *
 * return a request to the head of a cancellable queue
 *
 */
BOOLEAN
  ReplaceRequest(
      PIRP pIrp,
      PLIST_ENTRY pQueueHead,
      PDRIVER_CANCEL pCancelFunc
  );


/*
 * increment the skipcount, and complete a wait-error irp if there
 * is one waiting.
 */
VOID
  ReportSkip(
      PDEVICE_INFO pDevInfo
  );

/*
 * queue a wait-error request to the queue of cancellable wait-error requests,
 * and return the irp's status (pending, cancelled, etc);
 *
 * When queuing, check the cancel flag and insert the correct cancel routine.
 *
 * If there is a skip-count to report, then:
 *   --- if there is another irp on the q already complete that and leave
 *       the current irp pending.
 *   -- otherwise return STATUS_SUCCESSFUL for this IRP, having written out
 *      the result data.
 *
 * Even if cancelled or complete, IoCompleteRequest will NOT have been called
 * for this request.
 */
NTSTATUS
QueueWaitError(
    PDEVICE_INFO pDevInfo,
    PIRP pIrp
);

/*****************************************************************************

*****************************************************************************/
  #endif // _NT

/*
 * ConnectInterrupt
 *
 * This assumes that GetResources() has already been called to report the
 * resource usage, and that the _CALLBACK table has been set up
 * to handle interrupts.
 *
 * returns TRUE if success.
 */
BOOLEAN ConnectInterrupt(
    PDEVICE_INFO pDevInfo,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
偷拍一区二区三区| 56国语精品自产拍在线观看| 欧美一区二区三区四区久久| 亚洲一级二级三级| kk眼镜猥琐国模调教系列一区二区 | 日本不卡一区二区三区| 亚洲成av人影院| 欧美性大战久久| 一区二区三区四区精品在线视频| 99免费精品视频| 激情综合色播激情啊| 久久综合网色—综合色88| 久久精品国产精品亚洲精品| 欧美成人女星排名| 国产一区二区三区国产| 久久久久久久久久久久久久久99| 国产福利一区二区| 亚洲欧美日韩小说| 色哟哟一区二区在线观看| 亚洲一区二区三区四区在线| 国产亚洲欧美日韩在线一区| 99综合电影在线视频| 国产精品一区二区三区网站| 亚洲少妇中出一区| 在线视频国内一区二区| 久久精品国产99久久6| 天天综合色天天| 亚洲午夜久久久久久久久电影网| 欧美一区二区福利在线| 精品视频在线看| 韩国精品在线观看| 免费看日韩精品| 日本三级亚洲精品| 日韩在线一区二区三区| 国产精品丝袜黑色高跟| 在线精品视频免费观看| 色综合天天狠狠| 91免费观看在线| 久久精品国产在热久久| 欧美日韩高清在线| 国产精品资源网站| 国产制服丝袜一区| 丰满少妇久久久久久久| 亚洲麻豆国产自偷在线| 亚洲日本一区二区| 亚洲精品免费播放| 久久久久久久久岛国免费| 久久综合九色综合97婷婷女人 | 一区二区高清免费观看影视大全| 成人欧美一区二区三区黑人麻豆| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲va欧美va国产va天堂影院| 一区二区在线看| 亚洲一区二区三区四区在线免费观看 | 欧美大片免费久久精品三p| 91网站最新网址| 在线免费亚洲电影| 欧美军同video69gay| www.亚洲国产| 91久久人澡人人添人人爽欧美| 国产成人日日夜夜| 不卡视频在线看| 高清不卡在线观看av| 成人激情视频网站| 欧美图区在线视频| 日韩无一区二区| 欧美日韩一本到| 91精品国产综合久久精品app| 日韩丝袜情趣美女图片| 久久久99精品久久| 亚洲卡通动漫在线| 日本特黄久久久高潮| 性做久久久久久久久| 成人app在线观看| 91麻豆精品秘密| 欧美剧情片在线观看| 欧美一区二区三区日韩视频| 精品国产乱码久久久久久久| 久久久激情视频| 久久久久国产一区二区三区四区| 精品日韩欧美在线| 日韩美女精品在线| 日日摸夜夜添夜夜添亚洲女人| 色美美综合视频| 欧美日韩中字一区| 亚洲美女在线国产| 91美女片黄在线| 一区二区三区免费网站| 欧美日韩一区中文字幕| 日日骚欧美日韩| 久久久夜色精品亚洲| 亚洲精品一卡二卡| 精品亚洲国内自在自线福利| 久久精品欧美日韩精品| 国产精品久久久久久久第一福利| 欧美一二三四在线| 老色鬼精品视频在线观看播放| 韩日精品视频一区| 亚洲天堂成人在线观看| 美美哒免费高清在线观看视频一区二区 | 久久精品国内一区二区三区| 成人午夜av影视| 成人av在线影院| 欧美一区二视频| 亚洲天天做日日做天天谢日日欢| 久久99精品国产| 欧美亚洲一区二区在线| 国产天堂亚洲国产碰碰| 蜜臀99久久精品久久久久久软件| 91论坛在线播放| 国产蜜臀av在线一区二区三区| 中文字幕亚洲视频| 奇米精品一区二区三区四区| 欧美在线综合视频| 综合电影一区二区三区| 国产69精品久久久久毛片| 日韩精品中文字幕在线不卡尤物 | 精品一区二区三区的国产在线播放| jlzzjlzz亚洲日本少妇| 久久夜色精品国产噜噜av| 日本不卡视频在线| 欧美日本在线视频| 一区二区三区资源| 91蜜桃网址入口| 综合久久久久久| 成人动漫在线一区| 国产三级精品视频| 国产一区视频网站| 日韩欧美一级片| 麻豆国产一区二区| 91精品国产福利在线观看| 日韩主播视频在线| 91精品综合久久久久久| 日韩精品高清不卡| 91精品国产91久久综合桃花| 日韩在线一区二区三区| 91精品在线观看入口| 日本91福利区| 欧美日韩一区二区不卡| 欧美视频中文字幕| 日韩精品一区二区三区四区| 亚洲美女精品一区| 日本欧美久久久久免费播放网| 国产精品123| 国产亚洲精品中文字幕| 国产成人免费xxxxxxxx| 国产精品视频免费| 91亚洲大成网污www| 亚洲最色的网站| 7777精品久久久大香线蕉| 日本aⅴ免费视频一区二区三区| 日韩女优av电影| 国产91在线观看| 亚洲人一二三区| 欧美日韩久久不卡| 麻豆国产欧美日韩综合精品二区| 欧美精品一区二区蜜臀亚洲| 丰满亚洲少妇av| 亚洲综合丝袜美腿| 欧美一级久久久| 国产99一区视频免费| 亚洲女子a中天字幕| 欧美人伦禁忌dvd放荡欲情| 麻豆91免费看| 国产精品国产三级国产a| 欧美性色欧美a在线播放| 免费精品视频在线| 国产精品午夜春色av| 欧美午夜片在线看| 久久国产生活片100| 国产精品视频在线看| 欧美日韩国产综合一区二区三区 | 日韩制服丝袜av| 欧美精彩视频一区二区三区| 亚洲一区自拍偷拍| 欧美精品一区二区在线观看| 99久久精品国产毛片| 中国色在线观看另类| 欧美日韩亚洲不卡| 国产美女在线观看一区| 亚洲一区日韩精品中文字幕| 精品日产卡一卡二卡麻豆| aaa欧美日韩| 欧美卡1卡2卡| 日韩一级大片在线| 国产视频一区在线播放| 国产精品乱码一区二区三区软件| 久久精品免视看| 亚洲大片免费看| 精品一区二区三区香蕉蜜桃| 成人一区二区三区中文字幕| 高清国产一区二区| 欧美电影一区二区| 国产色婷婷亚洲99精品小说| 亚洲免费在线观看视频| 午夜久久久久久电影| 国产精品一区二区三区99| 97久久精品人人做人人爽50路| 91麻豆精品国产91久久久使用方法 | 樱花影视一区二区|