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

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

?? agp.c

?? ReactOS是一些高手根據Windows XP的內核編寫出的類XP。內核實現機理和API函數調用幾乎相同。甚至可以兼容XP的程序。喜歡研究系統內核的人可以看一看。
?? C
?? 第 1 頁 / 共 2 頁
字號:

      Status = ZwFreeVirtualMemory(VirtualMapping->ProcessHandle,
                                   &BaseAddress,
                                   &Size, MEM_RELEASE);
      if (!NT_SUCCESS(Status))
      {
         DPRINT1("Warning: ZwFreeVirtualMemory() failed: Status = 0x%x\n", Status);
         return NULL;
      }
      ASSERT(Size == Pages * PAGE_SIZE);
      ASSERT(BaseAddress == (PVOID)((ULONG_PTR)VirtualMapping->MappedAddress +
                                               OffsetInBytes));
      
      /* Map the physical memory into the released virtual memory area */
      Status = IntVideoPortMapPhysicalMemory(VirtualMapping->ProcessHandle,
                                             PhysicalAddress,
                                             Size,
                                             PAGE_READWRITE,
                                             &BaseAddress);
      if (!NT_SUCCESS(Status))
      {
         DPRINT1("Warning: IntVideoPortMapPhysicalMemory() failed: Status = 0x%x\n", Status);
         /* Reserve the released virtual memory area again */
         Status = ZwAllocateVirtualMemory(VirtualMapping->ProcessHandle,
                                          &BaseAddress, 0, &Size, MEM_RESERVE,
                                          PAGE_NOACCESS);
         if (!NT_SUCCESS(Status))
         {
            DPRINT1("Warning: ZwAllocateVirtualMemory() failed: Status = 0x%x\n", Status);
            /* FIXME: What to do now?? */
            ASSERT(0);
            return NULL;
         }
         ASSERT(Size == Pages * PAGE_SIZE);
         ASSERT(BaseAddress == (PVOID)((ULONG_PTR)VirtualMapping->MappedAddress +
                                               OffsetInBytes));
         return NULL;
      }
      ASSERT(BaseAddress == (PVOID)((ULONG_PTR)VirtualMapping->MappedAddress +
                                               OffsetInBytes));
   }

   return BaseAddress;
}

VOID NTAPI
IntAgpFreeVirtual(
   IN PVOID HwDeviceExtension,
   IN PVOID VirtualContext,
   IN ULONG Pages,
   IN ULONG Offset)
{
   PVIDEO_PORT_AGP_VIRTUAL_MAPPING VirtualMapping;
   PVOID BaseAddress = NULL;
   NTSTATUS Status;

   DPRINT("AgpFreeVirtual - VirtualContext: 0x%x Pages: %d, Offset: 0x%x\n",
          VirtualContext, Pages, Offset);

   VirtualMapping = (PVIDEO_PORT_AGP_VIRTUAL_MAPPING)VirtualContext;

   if (VirtualMapping->ProcessHandle == NULL)
   {
      /* FIXME: not implemented */
   }
   else /* ProcessHandle != NULL */
   {
      /* Unmap the section view */
      ULONG Size = Pages * PAGE_SIZE;
      ULONG OffsetInBytes = Offset * PAGE_SIZE;
      BaseAddress = (PVOID)((ULONG_PTR)VirtualMapping->MappedAddress +
                                       OffsetInBytes);

      Status = ZwUnmapViewOfSection(VirtualMapping->ProcessHandle, BaseAddress);
      if (!NT_SUCCESS(Status))
      {
         DPRINT1("Warning: ZwUnmapViewOfSection() failed: Status = 0x%x\n", Status);
         /* FIXME: What to do now?? */
         ASSERT(0);
         return;
      }

      /* And reserve the virtual memory area again */
      Status = ZwAllocateVirtualMemory(VirtualMapping->ProcessHandle,
                                       &BaseAddress, 0, &Size, MEM_RESERVE,
                                       PAGE_NOACCESS);
      if (!NT_SUCCESS(Status))
      {
         DPRINT1("Warning: ZwAllocateVirtualMemory() failed: Status = 0x%x\n", Status);
         /* FIXME: What to do now?? */
         ASSERT(0);
         return;
      }
      ASSERT(Size == Pages * PAGE_SIZE);
      ASSERT(BaseAddress == (PVOID)((ULONG_PTR)VirtualMapping->MappedAddress +
                                               OffsetInBytes));
   }
}

VOID NTAPI
IntAgpReleaseVirtual(
   IN PVOID HwDeviceExtension,
   IN PVOID VirtualContext)
{
   PVIDEO_PORT_AGP_VIRTUAL_MAPPING VirtualMapping;
   NTSTATUS Status;

   DPRINT("AgpReleaseVirtual - VirtualContext: 0x%x\n", VirtualContext);

   VirtualMapping = (PVIDEO_PORT_AGP_VIRTUAL_MAPPING)VirtualContext;
   
   /* Release the virtual memory */
   if (VirtualMapping->ProcessHandle == NULL)
   {
      /* FIXME: not implemented */
   }
   else /* ProcessHandle != NULL */
   {
      /* Release the allocated virtual memory */
      ULONG Size = VirtualMapping->AgpMapping->NumberOfPages * PAGE_SIZE;
      Status = ZwFreeVirtualMemory(VirtualMapping->ProcessHandle,
                                   &VirtualMapping->MappedAddress,
                                   &Size, MEM_RELEASE);
      if (!NT_SUCCESS(Status))
      {
         DPRINT1("Warning: ZwFreeVirtualMemory() failed: Status = 0x%x\n", Status);
      }
   }
   
   /* Free resources */
   ExFreePool(VirtualMapping);
}

PVOID NTAPI
IntAgpReserveVirtual(
   IN  PVOID HwDeviceExtension,
   IN  HANDLE ProcessHandle,
   IN  PVOID PhysicalContext,
   OUT PVOID *VirtualContext)
{
   PVIDEO_PORT_AGP_MAPPING AgpMapping;
   PVIDEO_PORT_AGP_VIRTUAL_MAPPING VirtualMapping;
   PVOID MappedAddress;
   NTSTATUS Status;

   DPRINT("AgpReserveVirtual - ProcessHandle: 0x%x PhysicalContext: 0x%x\n",
          ProcessHandle, PhysicalContext);

   AgpMapping = (PVIDEO_PORT_AGP_MAPPING)PhysicalContext;

   /* Allocate an AGP virtual mapping structure */
   VirtualMapping = ExAllocatePoolWithTag(PagedPool,
                                          sizeof(VIDEO_PORT_AGP_VIRTUAL_MAPPING),
                                          TAG_VIDEO_PORT);
   if (VirtualMapping == NULL)
   {
      DPRINT1("Out of memory! Couldn't allocate AGP virtual mapping structure!\n");
      return NULL;
   }
   RtlZeroMemory(VirtualMapping, sizeof(VIDEO_PORT_AGP_VIRTUAL_MAPPING));

   /* Reserve a virtual memory area for the physical pages. */
   if (ProcessHandle == NULL)
   {
      /* FIXME: What to do in this case? */
      ExFreePool(VirtualMapping);
      return NULL;
   }
   else /* ProcessHandle != NULL */
   {
      /* Reserve memory for usermode */
      ULONG Size = AgpMapping->NumberOfPages * PAGE_SIZE;
      MappedAddress = NULL;
      Status = ZwAllocateVirtualMemory(ProcessHandle, &MappedAddress, 0, &Size,
                                       MEM_RESERVE, PAGE_NOACCESS);
      if (!NT_SUCCESS(Status))
      {
         ExFreePool(VirtualMapping);
         DPRINT("ZwAllocateVirtualMemory() failed: Status = 0x%x\n", Status);
         return NULL;
      }
   }

   /* Fill the AGP virtual mapping */
   VirtualMapping->AgpMapping = AgpMapping;
   VirtualMapping->ProcessHandle = ProcessHandle;
   VirtualMapping->MappedAddress = MappedAddress;

   *VirtualContext = (PVOID)VirtualMapping;
   return MappedAddress;
}


BOOLEAN NTAPI
IntAgpSetRate(
   IN PVOID HwDeviceExtension,
   IN ULONG Rate)
{
   PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
   PAGP_BUS_INTERFACE_STANDARD AgpBusInterface;

   DPRINT("AgpSetRate - Rate: %d\n", Rate);

   DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
   AgpBusInterface = &DeviceExtension->AgpInterface;
   
   return NT_SUCCESS(AgpBusInterface->SetRate(AgpBusInterface->AgpContext, Rate));
}


NTSTATUS NTAPI
IntAgpGetInterface(
   IN PVOID HwDeviceExtension,
   IN OUT PINTERFACE Interface)
{
   IO_STATUS_BLOCK IoStatusBlock;
   IO_STACK_LOCATION IoStack;
   NTSTATUS Status;
   PVIDEO_PORT_AGP_INTERFACE_2 AgpInterface;
   PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
   PAGP_BUS_INTERFACE_STANDARD AgpBusInterface;

   DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
   AgpBusInterface = &DeviceExtension->AgpInterface;
   AgpInterface = (PVIDEO_PORT_AGP_INTERFACE_2)Interface;

   ASSERT((Interface->Version == VIDEO_PORT_AGP_INTERFACE_VERSION_2 &&
           Interface->Size >= sizeof(VIDEO_PORT_AGP_INTERFACE_2)) ||
          (Interface->Version == VIDEO_PORT_AGP_INTERFACE_VERSION_1 &&
           Interface->Size >= sizeof(VIDEO_PORT_AGP_INTERFACE)));

   if (DeviceExtension->NextDeviceObject == NULL)
   {
      DPRINT("DeviceExtension->NextDeviceObject is NULL!\n");
      return STATUS_UNSUCCESSFUL;
   }

   /* Query the interface from the AGP bus driver */
   if (DeviceExtension->AgpInterface.Size == 0)
   {
      AgpBusInterface->Size = sizeof(AGP_BUS_INTERFACE_STANDARD);
      if (Interface->Version == VIDEO_PORT_AGP_INTERFACE_VERSION_1)
         AgpBusInterface->Version = AGP_BUS_INTERFACE_V1;
      else /* if (InterfaceVersion == VIDEO_PORT_AGP_INTERFACE_VERSION_2) */
         AgpBusInterface->Version = AGP_BUS_INTERFACE_V2;
      IoStack.Parameters.QueryInterface.Size = AgpBusInterface->Size;
      IoStack.Parameters.QueryInterface.Version = AgpBusInterface->Version;
      IoStack.Parameters.QueryInterface.Interface = (PINTERFACE)AgpBusInterface;
      IoStack.Parameters.QueryInterface.InterfaceType =
         &GUID_AGP_TARGET_BUS_INTERFACE_STANDARD;
      Status = IopInitiatePnpIrp(DeviceExtension->NextDeviceObject,
         &IoStatusBlock, IRP_MN_QUERY_INTERFACE, &IoStack);
      if (!NT_SUCCESS(Status))
      {
         DPRINT("IopInitiatePnpIrp() failed! (Status 0x%x)\n", Status);
         return Status;
      }
      DPRINT("Got AGP driver interface!\n");
   }

   /* FIXME: Not sure if we should wrap the reference/dereference functions */
   AgpInterface->Context = AgpBusInterface->AgpContext;
   AgpInterface->InterfaceReference = AgpBusInterface->InterfaceReference;
   AgpInterface->InterfaceDereference = AgpBusInterface->InterfaceDereference;
   AgpInterface->AgpReservePhysical = IntAgpReservePhysical;
   AgpInterface->AgpReleasePhysical = IntAgpReleasePhysical;
   AgpInterface->AgpCommitPhysical = IntAgpCommitPhysical;
   AgpInterface->AgpFreePhysical = IntAgpFreePhysical;
   AgpInterface->AgpReserveVirtual = IntAgpReserveVirtual;
   AgpInterface->AgpReleaseVirtual = IntAgpReleaseVirtual;
   AgpInterface->AgpCommitVirtual = IntAgpCommitVirtual;
   AgpInterface->AgpFreeVirtual = IntAgpFreeVirtual;
   AgpInterface->AgpAllocationLimit = 0x1000000; /* FIXME: using 16 MB for now */

   if (AgpInterface->Version >= VIDEO_PORT_AGP_INTERFACE_VERSION_2)
   {
      AgpInterface->AgpSetRate = IntAgpSetRate;
   }

   return STATUS_SUCCESS;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费观看日韩欧美| 精品亚洲欧美一区| 国产精品视频免费| 日韩精品在线一区二区| 日韩欧美成人激情| 7777精品伊人久久久大香线蕉超级流畅| 99精品国产热久久91蜜凸| 成人永久看片免费视频天堂| 豆国产96在线|亚洲| 成人激情文学综合网| 91免费观看在线| 在线观看日产精品| 欧美精品第一页| 欧美一区二区三区在线观看 | 精品日韩在线观看| 欧美一二三在线| 日本高清不卡在线观看| 欧美一级片免费看| 欧美成人乱码一区二区三区| 久久老女人爱爱| 国产精品不卡一区| 亚洲观看高清完整版在线观看| 国产一区二区三区黄视频 | 精品视频在线看| 欧美日韩成人高清| 久久精品人人做| 亚洲一区二区三区视频在线| 美女网站在线免费欧美精品| 成人手机电影网| 欧美系列亚洲系列| 久久色成人在线| 一区二区三区四区在线播放 | 色猫猫国产区一区二在线视频| 欧美日韩成人激情| 婷婷亚洲久悠悠色悠在线播放| 免费观看在线综合| av一二三不卡影片| 5566中文字幕一区二区电影| 久久久蜜桃精品| 亚洲国产综合在线| 成人在线视频首页| 91精品国产一区二区三区香蕉 | www激情久久| 亚洲欧洲色图综合| 激情综合色播激情啊| 在线影院国内精品| 国产人妖乱国产精品人妖| 亚洲3atv精品一区二区三区| 高清不卡一二三区| 日韩欧美色综合| 亚洲高清一区二区三区| 精品久久人人做人人爱| 久久亚洲一区二区三区四区| 国产精品乱码久久久久久| 视频一区在线播放| 91麻豆产精品久久久久久| 久久人人超碰精品| 日韩精彩视频在线观看| 91在线视频网址| 国产婷婷色一区二区三区四区| 日本欧美在线观看| 欧洲精品在线观看| 一区二区三区自拍| av一区二区不卡| 中文无字幕一区二区三区| 久久91精品久久久久久秒播| 欧美在线一二三| 亚洲另类色综合网站| 不卡的看片网站| 国产亚洲精品7777| 国产美女精品人人做人人爽| 日韩精品一区二区三区四区视频 | 日韩一区二区在线观看视频| 一区二区三区在线视频免费| 色综合天天天天做夜夜夜夜做| 国产精品人妖ts系列视频| 国产不卡视频在线观看| 国产日韩欧美不卡| 高清国产午夜精品久久久久久| 久久综合九色综合97_久久久| 狠狠色丁香久久婷婷综合丁香| 日韩欧美一级二级| 激情久久五月天| xnxx国产精品| 国产·精品毛片| 亚洲欧洲精品一区二区三区不卡| 国产风韵犹存在线视精品| 国产性天天综合网| 99久久99久久精品免费看蜜桃 | 亚洲一区二区精品3399| 欧美午夜一区二区三区| 亚洲第一会所有码转帖| 日韩一区二区电影网| 激情六月婷婷久久| 亚洲欧美自拍偷拍| 在线观看国产精品网站| 日韩av一区二区在线影视| 欧美mv日韩mv亚洲| 成人av一区二区三区| 亚洲精品免费看| 日韩一区二区免费高清| 国产精品一区二区无线| 最新不卡av在线| 欧美丰满少妇xxxxx高潮对白| 久久电影网站中文字幕| 国产精品久久久久久久第一福利| 91麻豆国产自产在线观看| 奇米在线7777在线精品| 亚洲国产精品黑人久久久| 欧美亚洲综合网| 黑人精品欧美一区二区蜜桃 | 欧美亚男人的天堂| 蜜臀久久99精品久久久久宅男| 国产亚洲精品免费| 欧美在线制服丝袜| 国产一区三区三区| 亚洲不卡在线观看| 欧美国产成人精品| 欧美一区二区性放荡片| 不卡av电影在线播放| 日韩成人免费看| 亚洲欧美一区二区三区国产精品| 欧美一区二区三区思思人| 不卡的电影网站| 激情欧美日韩一区二区| 亚洲一区二区三区四区在线| 久久久精品免费观看| 欧美日韩国产成人在线91| av午夜精品一区二区三区| 久久电影网站中文字幕| 亚洲成人777| 亚洲麻豆国产自偷在线| 国产日韩欧美综合一区| 日韩视频在线你懂得| 色综合视频一区二区三区高清| 久99久精品视频免费观看| 香蕉乱码成人久久天堂爱免费| 综合久久久久久| 亚洲国产精品成人综合色在线婷婷| 欧美一区二区福利在线| 欧美三级日韩在线| 色综合天天综合色综合av| 波多野结衣中文字幕一区| 激情欧美日韩一区二区| 美女脱光内衣内裤视频久久影院| 亚洲一区二区三区视频在线播放 | 欧美日韩一区在线| 99久久久精品| 成人在线视频一区二区| 粉嫩一区二区三区在线看| 精品影院一区二区久久久| 美女视频一区二区| 精品一区二区在线视频| 久久精品国产77777蜜臀| 热久久国产精品| 美女在线视频一区| 久久99久久久欧美国产| 精品综合免费视频观看| 卡一卡二国产精品 | 久久久亚洲国产美女国产盗摄| 欧美成va人片在线观看| 欧美电影精品一区二区| 精品成人私密视频| 中文字幕av在线一区二区三区| 国产精品麻豆欧美日韩ww| 综合自拍亚洲综合图不卡区| 一区二区久久久久久| 亚洲国产一区二区三区| 日韩av中文字幕一区二区| 久久99国产乱子伦精品免费| 成人中文字幕合集| 91麻豆视频网站| 91精品国产综合久久蜜臀| 精品久久人人做人人爽| 国产精品美女视频| 亚洲制服丝袜av| 九色综合狠狠综合久久| 成人免费高清视频| 欧美日韩一级片网站| 精品国产乱码久久久久久影片| 国产欧美视频在线观看| 一区二区激情视频| 久久99最新地址| 成人免费观看av| 欧美日韩情趣电影| 国产亚洲精品aa午夜观看| 一区二区三区中文字幕| 久久精品99久久久| 91毛片在线观看| 欧美一区二区三区性视频| 国产精品女主播在线观看| 亚洲不卡在线观看| 成人午夜视频在线| 777久久久精品| 国产亚洲人成网站| 午夜久久久久久久久| 国产成人av一区二区三区在线| 欧美亚洲尤物久久| 国产精品免费久久久久| 美女久久久精品|