Compartilhar via


CeSetMemoryAttributes

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Essa função fornece dispositivo drivers e aplicativos com uma maneira de usar atributos memória com suporte em algumas plataformas hardware que o kernel não suporte Por padrão.

Syntax

BOOL CeSetMemoryAttributes(
  LPVOID pVirtualAddr,
  LPVOID pShiftedPhysAddr,
  DWORD cbSize,
  DWORD dwAttributes
);

Parameters

  • pVirtualAddr
    [no] Iniciando endereço memória virtual.

    Endereço de memória deve ser alinhado-Página.

  • pShiftedPhysAddr
    [no] Físico correspondente endereço memória deslocadas por 8 bits ou PHYSICAL_ADDRESS_UNKNOWN.

    Se o valor deste parâmetro não for definida para PHYSICAL_ADDRESS_UNKNOWN, um físico endereço que tenha esse parâmetro definido como 8 Less than deve ser Page-alinhado.

    O intervalo especificado deve estar fisicamente contíguo, o que significa que a (intervalopVirtualAddr Para pVirtualAddr sinal de mais cbSize) deve ser mapeada para (pPhysAddr Para pPhysAddr sinal de mais cbSize).

  • cbSize
    [no] Tamanho, em bytes, da memória a ser alterada.

    Este parâmetro deve ser um múltiplo de páginas.

  • dwAttributes
    [no] Atributo memória a ser definido.

    É apenas PAGE_WRITECOMBINE com suporte. Gravação-combinando Permite transferências de gravação barramento a ser combinadas em um maior transferir antes de serem gravadas.

Return Value

Nonzero indica sucesso. Zero indica falha. Para informações de erro estendidas get, chamar GetLastError.

Remarks

O atual não requer suporte para atributos memória na função de VirtualSetAttributes #ifdef As marcas e consultas para a OAL para drivers ou aplicativos para usar esses atributos.

CeSetMemoryAttributes é independente de plataforma.

Essa função é unidirecional, o que significa que após o atributo é definido, ele não pode ser remover.

Alguns x 86 CPUs, tais como x 86 com suporte PAT, não exigem o físico endereço para combinar gravação suporte. Outros CPUs exigem contíguo físico endereço, such as x 86 com suporte Memory Type Range Registers (MTRR). Chamar CeSetMemoryAttributes Com um válido pShiftedPhysAddr Se o intervalo de físico endereço é conhecido para que ele funcione em x 86 CPUs.

O seguinte exemplo de código mostra uma implementação de CeSetMemoryAttributes Na típica exibir driver codificar.

#define FRAMEBUFFER_PHYSADDR   0xdc000000   // Physical address of the frame buffer
#define FRAMEBUFFER_SIZE   0x00400000       // 4M of frame buffer
LPVOID InitFrameBuffer ()
{
   // Allocate and set up the frame buffer.
   LPVOID pVirtualAddr = VirtualAlloc (NULL, FRAMEBUFFER_SIZE, MEM_RESERVE, PAGE_NOACCESS);
   if (!pVirtualAddr)
   {
      return NULL;
   }
   if (!VirtualCopy (pVirtualAddr, (LPVOID) (FRAMEBUFFER_PHYSADDR >> 8), FRAMEBUFFER_SIZE, PAGE_NOCACHE|PAGE_READWRITE))
   {
      // Error
      VirtualFree (pVirtualAddr, 0, MEM_RELEASE);
      return NULL;
   }
   // Try to set 'Write-Combine' attribute on the frame buffer.
   // It does not matter if it succeeds or not.
   CeSetMemoryAttributes (pVirtualAddr, (LPVOID) (FRAMEBUFFER_PHYSADDR >> 8), FRAMEBUFFER_SIZE, PAGE_WRITECOMBINE);
   return pVirtualAddr;
}

Requirements

Header pkfuncs.h
Library coredll.lib
Windows Embedded CE Windows CE 5.0 and later

See Also

Reference

Kernel Functions
VirtualSetAttributes

Concepts

Kernel Mode APIs

Other Resources

pfnOEMSetMemoryAttributes