lock.c
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:1k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * lock.c
  3.  *
  4.  * Ethernet Packet Interface to NDIS drivers.
  5.  *
  6.  * Copyright 1998 Equivalence Pty. Ltd.
  7.  *
  8.  * Original code by William Ingle (address unknown)
  9.  *
  10.  * $Log: lock.c,v $
  11.  * Revision 1.1  1998/09/28 08:08:38  robertj
  12.  * Initial revision
  13.  *
  14.  */
  15. #define WANTVXDWRAPS
  16. #include <basedef.h>
  17. #include <vmm.h>
  18. #include <vxdwraps.h>               // must come last
  19. #include "lock.h"
  20. #pragma VxD_LOCKED_CODE_SEG
  21. #pragma VxD_LOCKED_DATA_SEG
  22. DWORD _stdcall PacketPageLock(DWORD lpMem, DWORD cbSize)
  23. {
  24.   // lock a page
  25.   DWORD LinOffset = lpMem & 0xfff; // page offset of memory to map
  26.   DWORD LinPageNum = lpMem >> 12;  // generate page number
  27.   DWORD nPages = ((lpMem + cbSize) >> 12) - LinPageNum + 1; // Calculate # of pages to map globally
  28.   // Return global mapping of passed in pointer, as this new pointer
  29.   // is how the memory must be accessed out of context.
  30.   return _LinPageLock(LinPageNum, nPages, PAGEMAPGLOBAL) + LinOffset;
  31. }
  32. void _stdcall PacketPageUnlock(void * lpMem, DWORD cbSize)
  33. {
  34.   // unlock a page
  35.   DWORD LinPageNum = (DWORD)lpMem >> 12;
  36.   DWORD nPages = (((DWORD)lpMem + cbSize) >> 12) - LinPageNum + 1;
  37.   // Free globally mapped memory
  38.   _LinPageUnlock(LinPageNum, nPages, PAGEMAPGLOBAL);
  39. }
  40. // End of File ////////////////////////////////////////////////////////////////