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

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

?? aspi_hlio.cpp

?? PS2游戲硬盤直灌(HDL)的Windows下VC的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* * aspi_hlio.c - ASPI high-level I/O * $Id: aspi_hlio.c,v 1.4 2004/12/04 10:20:53 b081 Exp $ * * Copyright 2004 Bobi B., w1zard0f07@yahoo.com * * This file is part of hdl_dump. * * hdl_dump is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * hdl_dump 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with hdl_dump; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "aspi_hlio.h"#include <windows.h>#include <stdio.h>#include <time.h>#include "wnaspi32.h"#include "osal.h"#include "retcodes.h"/* after this timeout command is aborted */#define ASPI_TIMEOUT_IN_SEC 10/* types */typedef DWORD (*aspi_send_cmd_t) (LPSRB srb);typedef DWORD (*aspi_get_info_t) (void);/* globals */static int aspi_initialized = 0; /* reference counter */static HMODULE aspi_lib = NULL;static aspi_send_cmd_t aspi_send_cmd;static aspi_get_info_t aspi_get_info;/* NOTICE: those are not thread-safe */static int err_srb_status = 0, err_sense = 0, err_asc = 0, err_ascq = 0;/**************************************************************/static voidaspi_set_last_error (int srb_status,		     int sense_key,		     int asc,		     int ascq){  /* NOTICE: that is not thread-safe */  err_srb_status = srb_status;  err_sense = sense_key;  err_asc = asc;  err_ascq = ascq;}/**************************************************************/static voidcopy_and_reduce_spaces (char *out,			const char *in){  int last_were_space = 0;  while (*in != '\0')    {      if (*in == ' ')	{	  if (last_were_space)	    ++in;	  else	    *out++ = *in++;	  last_were_space = 1;	}      else	{	  *out++ = *in++;	  last_were_space = 0;	}    }  if (last_were_space)    --out;  *out = '\0';}/**************************************************************/intaspi_load (void){  int result;  if (aspi_initialized)    {      ++aspi_initialized;      return (RET_OK);    }#if 0  /* try loading both sequentially */  aspi_lib = LoadLibrary ("WNASPINT.DLL");  if (aspi_lib == NULL)#endif    aspi_lib = LoadLibrary ("WNASPI32.DLL");  if (aspi_lib != NULL)    {      aspi_send_cmd = (aspi_send_cmd_t) GetProcAddress (aspi_lib, "SendASPI32Command");      aspi_get_info = (aspi_get_info_t) GetProcAddress (aspi_lib, "GetASPI32SupportInfo");      if (aspi_send_cmd != NULL &&	  aspi_get_info != NULL)	{	  DWORD support_info = aspi_get_info ();	  if (HIBYTE (LOWORD (support_info)) == SS_COMP ||	      HIBYTE (LOWORD (support_info)) == SS_NO_ADAPTERS)	    {	      result = RET_OK;	      aspi_initialized = 1;	    }	  else	    { /* give-up on error? */	      result = RET_ERR;	      aspi_unload ();	    }	}      else	{ /* no such procedures in the DLL */	  result = RET_ERR;	  aspi_unload ();	}    }  else /* DLL not found */    result = RET_ERR;  return (result);}/**************************************************************/intaspi_unload (void){  if (aspi_initialized)    {      --aspi_initialized;      if (aspi_initialized == 0)	{	  /* the old ASPI could crash if freed imediately after init;	     borrowed from don't remember where */	  Sleep (200);	  /* unload and clean-up */	  aspi_get_info = NULL;	  aspi_send_cmd = NULL;	  if (aspi_lib != NULL)	    {	      FreeLibrary (aspi_lib);	      aspi_lib = NULL;	    }	  return (RET_OK);	}    }  return (RET_OK);}/**************************************************************/static intaspi_reset_device (int host,		   int scsi_id,		   int lun){  SRB_BusDeviceReset reset;  int result;  memset (&reset, 0, sizeof (SRB_BusDeviceReset));  reset.SRB_Cmd = SC_RESET_DEV;  reset.SRB_HaId = host;  reset.SRB_Target = scsi_id;  reset.SRB_Lun = lun;  result = aspi_send_cmd ((LPSRB) &reset);  while (reset.SRB_Status == SS_PENDING)    Sleep (1);  if (reset.SRB_Status == SS_COMP)    return (RET_OK);  else    {      aspi_set_last_error (reset.SRB_Status, 0, 0, 0);      return (RET_ERR);    }}/**************************************************************/static intaspi_rescan_host (int host){  SRB_RescanPort rescan;  memset (&rescan, 0, sizeof (SRB_RescanPort));  rescan.SRB_Cmd = SC_RESCAN_SCSI_BUS;  rescan.SRB_HaId = host;  aspi_send_cmd ((LPSRB) &rescan);  if (rescan.SRB_Status == SS_COMP ||      rescan.SRB_Status == SS_NO_DEVICE)    return (RET_OK);  else    {      aspi_set_last_error (rescan.SRB_Status, 0, 0, 0);      return (RET_ERR);    }}/**************************************************************/#if 0 /* not used */static intaspi_exec (SRB_ExecSCSICmd *exec){  HANDLE event = CreateEvent (NULL, TRUE, FALSE, NULL);  if (event != NULL)    { /* wait for event */      exec->SRB_Flags |= SRB_EVENT_NOTIFY;      exec->SRB_PostProc = (LPVOID) event;      aspi_send_cmd ((LPSRB) exec);      if (exec->SRB_Status == SS_PENDING)	WaitForSingleObject (event, INFINITE);      CloseHandle (event);    }  else    { /* poll */      aspi_send_cmd ((LPSRB) exec);      while (exec->SRB_Status == SS_PENDING)	Sleep (1); /* don't 100% CPU, but Sleep (1) usually == Sleep (10) */    }  /* process the result code */  if (exec->SRB_Status == SS_COMP)    return (RET_OK);  else    { /* keep error details */      int sense = exec->SenseArea [2] & 0x0f;      int asc = exec->SenseArea [12];      int ascq = exec->SenseArea [13];      aspi_set_last_error (exec->SRB_Status, sense, asc, ascq);      return (RET_ERR);    }}#endif/**************************************************************/static intaspi_exec_to (SRB_ExecSCSICmd *exec,	      DWORD timeout_in_ms){  int abort = 0;  HANDLE event = CreateEvent (NULL, TRUE, FALSE, NULL);  if (event != NULL)    { /* wait for event */      exec->SRB_Flags |= SRB_EVENT_NOTIFY;      exec->SRB_PostProc = (LPVOID) event;      aspi_send_cmd ((LPSRB) exec);      if (exec->SRB_Status == SS_PENDING)	{	  DWORD ret = WaitForSingleObject (event, timeout_in_ms);	  if (ret == WAIT_OBJECT_0)	    ; /* ok; signaled before timeout has expired */	  else if (ret == WAIT_TIMEOUT)	    abort = 1;	}      CloseHandle (event);    }  else    { /* poll */      DWORD start = GetTickCount ();      aspi_send_cmd ((LPSRB) exec);      while (exec->SRB_Status == SS_PENDING)	{	  DWORD elapsed = GetTickCount () - start;	  if (elapsed >= timeout_in_ms)	    {	      abort = 1;	      break;	    }	  Sleep (1); /* don't 100% CPU, but Sleep (1) usually == Sleep (10) */	}    }  if (abort)    { /* operation should be aborted */      SRB_Abort abort;      memset (&abort, 0, sizeof (SRB_Abort));      abort.SRB_Cmd = SC_ABORT_SRB;      abort.SRB_HaId = exec->SRB_HaId;      abort.SRB_ToAbort = (void*) exec;      /* abort is synchronious - would not return until operation is aborted */      aspi_send_cmd ((LPSRB) &abort);    }  /* process the result code */  if (exec->SRB_Status == SS_COMP)    return (RET_OK);  else    { /* keep error details */      int sense = exec->SenseArea [2] & 0x0f;      int asc = exec->SenseArea [12];      int ascq = exec->SenseArea [13];      aspi_set_last_error (exec->SRB_Status, sense, asc, ascq);      return (RET_ERR);    }}/**************************************************************/static scsi_devices_list_t*aspi_dlist_alloc (void){  scsi_devices_list_t* list = (scsi_devices_list_t*) osal_alloc (sizeof (scsi_devices_list_t));  if (list != NULL)    {      memset (list, 0, sizeof (scsi_devices_list_t));    }  return (list);}/**************************************************************/static intaspi_dlist_add (scsi_devices_list_t *list,		int host,		int scsi_id,		int lun,		int type,		u_int32_t align,		const char *name,		u_int32_t sector_size,		u_int32_t size_in_sectors){  scsi_device_t *dev;  if (list->used == list->alloc)    {      scsi_device_t *tmp =	(scsi_device_t*) osal_alloc ((list->alloc + 16) * sizeof (scsi_device_t));      if (tmp != NULL)	{	  if (list->device != NULL)	    {	      memcpy (tmp, list->device, list->used * sizeof (scsi_device_t));	      osal_free (list->device);	    }	  list->device = tmp;	  list->alloc += 16;	}      else	return (RET_NO_MEM);    }  dev = list->device + list->used;  dev->host = host;  dev->scsi_id = scsi_id;  dev->lun = lun;  dev->type = type;  dev->align = align;  strcpy (dev->name, name);  dev->sector_size = sector_size;  dev->size_in_sectors = size_in_sectors;  ++list->used;  return (RET_OK);}/**************************************************************/voidaspi_dlist_free (scsi_devices_list_t *list){  if (list != NULL)    {      if (list->device)	osal_free (list->device);      osal_free (list);    }}/**************************************************************/static intaspi_inquiry (int host,	      int scsi_id,	      int lun,	      char device_name [28 + 1]){  char buffer [37];  SRB_ExecSCSICmd exec;  memset (&exec, 0, sizeof (SRB_ExecSCSICmd));  exec.SRB_Cmd = SC_EXEC_SCSI_CMD;  exec.SRB_HaId = host;  exec.SRB_Flags = SRB_DIR_IN;  exec.SRB_Target = scsi_id;  exec.SRB_Lun = lun;  exec.SRB_BufLen = sizeof (buffer) - 1;  exec.SRB_BufPointer = (unsigned char*) buffer;  exec.SRB_SenseLen = SENSE_LEN;  exec.SRB_CDBLen = 6;  /* SPC-R11A.PDF, 7.5 INQUIRY command; mandatory */  exec.CDBByte [0] = SCSI_INQUIRY;  exec.CDBByte [4] = sizeof (buffer) - 1;  if (aspi_exec_to (&exec, ASPI_TIMEOUT_IN_SEC * 1000) == RET_OK &&      exec.SRB_Status == SS_COMP)    { /* 8-15: vendor Id; 16-31: product Id; 32-35: product revision */      buffer [32] = '\0';      copy_and_reduce_spaces (device_name, buffer + 8);      return (RET_OK);    }  else    return (RET_ERR); /* aspi_exec_to would track error by itself */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电视剧在线观看完整版| 在线看国产一区二区| 亚洲一区二区三区四区的| 国产精品国产馆在线真实露脸| 久久噜噜亚洲综合| 久久色.com| 国产欧美一区二区在线| 国产精品九色蝌蚪自拍| 国产精品久久久久久久蜜臀| 亚洲欧美在线高清| 亚洲综合男人的天堂| 五月天亚洲婷婷| 精品亚洲成a人| 国产91精品一区二区麻豆亚洲| 粉嫩av一区二区三区| 色婷婷久久久久swag精品| 日本高清免费不卡视频| 91麻豆精品国产91久久久更新时间| 欧美一区二区三区的| 精品国产乱码久久久久久蜜臀| 国产婷婷色一区二区三区四区 | 97久久超碰国产精品| 91麻豆国产在线观看| 5858s免费视频成人| 久久免费精品国产久精品久久久久| 国产亲近乱来精品视频| 一区二区三区免费看视频| 视频一区欧美日韩| 成人免费精品视频| 欧美日韩欧美一区二区| 精品国产欧美一区二区| 国产精品美女久久久久久久久| 亚洲成a人v欧美综合天堂下载| 激情综合亚洲精品| 99r精品视频| 2024国产精品| 亚洲成av人**亚洲成av**| 国产精品1区2区| 欧美亚洲动漫精品| 国产色爱av资源综合区| 视频一区二区三区中文字幕| 成人精品高清在线| 777亚洲妇女| 亚洲日本欧美天堂| 国产一区视频导航| 51精品国自产在线| 蜜臀av在线播放一区二区三区| 成人综合婷婷国产精品久久蜜臀| 欧美福利视频一区| 亚洲欧美日韩一区二区| 狠狠狠色丁香婷婷综合激情| 欧美日韩久久久| 亚洲欧洲精品成人久久奇米网| 久久精品国产亚洲高清剧情介绍| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩久久一区二区| 国产精品久久看| 国产一区二区在线观看视频| 91精品国产91热久久久做人人| 亚洲欧美经典视频| 91在线视频播放| 国产精品久久99| 不卡一卡二卡三乱码免费网站 | 高清不卡在线观看av| 日韩免费高清av| 青青草国产精品97视觉盛宴| 色先锋aa成人| 亚洲欧美日韩人成在线播放| 国产91丝袜在线观看| 国产性色一区二区| 国产91精品久久久久久久网曝门| 精品久久久久久久久久久院品网| 日韩av一区二区在线影视| 欧美日本一区二区三区四区| 亚洲一区二区三区在线看| 91福利在线导航| 亚洲综合成人网| 欧美色综合网站| 视频在线观看91| 欧美成人欧美edvon| 国产毛片精品一区| 久久久久久久精| 99久久婷婷国产综合精品| 亚洲九九爱视频| 91麻豆视频网站| 午夜精品久久久久久久蜜桃app| 在线亚洲高清视频| 亚洲成av人**亚洲成av**| 91精品婷婷国产综合久久性色| 美女网站在线免费欧美精品| 久久久精品日韩欧美| 99久久99久久综合| 亚洲成人动漫av| 久久免费看少妇高潮| 色婷婷久久久综合中文字幕| 亚洲成人av电影| 国产欧美一区二区精品性色超碰| eeuss鲁片一区二区三区| 亚洲午夜久久久久久久久电影网 | 国产成人午夜视频| 亚洲人成7777| 欧美mv日韩mv国产| 91麻豆.com| 九色综合狠狠综合久久| 免费成人在线视频观看| 国产日产欧美精品一区二区三区| 一本久道久久综合中文字幕| 日本不卡视频在线观看| 日本一二三四高清不卡| 欧美久久一二区| 成人少妇影院yyyy| 婷婷中文字幕一区三区| 中文字幕日韩av资源站| 日韩久久免费av| 一本到不卡免费一区二区| 男女男精品网站| 一区二区激情小说| 中文在线一区二区| 欧美一区二区三区成人| 色综合久久久久综合体桃花网| 精品一区二区精品| 婷婷丁香激情综合| 欧美一区中文字幕| 成人动漫精品一区二区| 一区免费观看视频| av资源站一区| 日一区二区三区| 久久婷婷国产综合精品青草| 精品一区二区三区久久| 91精品在线一区二区| 国产在线日韩欧美| 亚洲福利电影网| 欧美高清在线一区| 福利一区福利二区| 美女网站一区二区| 久久夜色精品国产噜噜av| 国产一区二区不卡老阿姨| 2021久久国产精品不只是精品| 美女性感视频久久| 国产精品大尺度| 91精品办公室少妇高潮对白| 中文字幕一区二区三中文字幕| jlzzjlzz欧美大全| 亚洲午夜日本在线观看| 精品国产乱码久久久久久闺蜜 | 精品国产凹凸成av人导航| 美国一区二区三区在线播放| 久久免费视频一区| 大桥未久av一区二区三区中文| 欧美日韩高清影院| 麻豆一区二区99久久久久| 亚洲欧美一区二区三区极速播放 | 91精品国产欧美一区二区18| 精品一区二区三区视频| 一色桃子久久精品亚洲| 亚洲精品写真福利| 日本va欧美va瓶| 一区二区三区高清| heyzo一本久久综合| 99精品视频一区| 欧美日韩高清一区二区不卡| 欧美日韩综合一区| 久久精品日韩一区二区三区| 午夜国产精品影院在线观看| 欧美国产日韩精品免费观看| 欧美一区二区在线免费观看| 一本久久a久久精品亚洲| 国产网红主播福利一区二区| www.99精品| 亚洲九九爱视频| 亚洲小说春色综合另类电影| 亚洲午夜久久久久久久久久久 | 久久91精品国产91久久小草| 久久av资源网| 成人夜色视频网站在线观看| 成人av小说网| 欧美色成人综合| 日韩一区二区在线播放| 精品国产一区二区三区久久影院 | 欧美亚洲国产怡红院影院| 久久久www免费人成精品| 久久精品人人爽人人爽| 一区在线观看视频| 婷婷综合在线观看| 粉嫩高潮美女一区二区三区| 欧美亚洲综合另类| 2020国产精品| 一区二区三区欧美亚洲| 国产一区在线观看麻豆| 在线亚洲高清视频| 久久久国产精华| 三级精品在线观看| 成人综合激情网| 欧美另类z0zxhd电影| 欧美激情一区二区三区不卡| 污片在线观看一区二区| 成人免费观看视频| 日韩欧美久久一区| 亚洲综合激情小说| 高清国产午夜精品久久久久久|