Access

  MS Access 2010+  |  Aplication Programming Interface API  |   VBA 7.0

• API. Funkcje zarządzania blokami danych pamięci.

Jeżeli chcemy szybko przenosić dane z jednego obszaru pamięci do innego obszaru pamięci, np. w celu zamiany części danych, lub całości pomiędzy dowolnymi zmiennym, tablicami, strukturami itp., powinniśmy użyć funkcji CopyMemory(...), która:

Opis funkcji API CopyMemory (...)

kopiuje ciąg bajtów z jednego obszaru pamięci do drugiego obszaru tej pamięci. Źródłowy i docelowy obszar pamięci muszą być oddzielnymi obszarami (nie mogą nakładać się na siebie).

Private Declare Sub CopyMemory Lib "kernel32" _
        Alias "RtlMoveMemory" _
        (Destination As Any, _
        Source As Any, _
        ByVal Length As Long)
  • argumenty:
    • Destination
    • wskaźnik do początku docelowego obszaru pamięci
    • Source
    • wskaźnik do początku źródłowego obszaru pamięci
    • Length
    • długość obszaru do skopiowania (w bajtach)
  • zwraca:
  • procedura ta nie zwraca żadnej wartości

Uwagi.

  1. Brak przed argumentem Destination lub Source słowa kluczowego ByVal oznacza, że wskazuje on bezpośrednio na zmienną tablicową lub obiekt. Jeśli chcemy wykorzystać funkcję w celu operowania na ciągach znaków lub wskaźnikach musimy argument Destination lub Source poprzedzić słowem kluczowym ByVal. Zostanie wtedy przekazana wartość wskaźnika do ciągu znaków lub wartość samego wskaźnika.
  2. Jeżeli bloki pamięci nakładają się, wynik kopiowania pamięci tą funkcją jest niezdefiniowany. Aby kopiować nakładające się bloki pamięci należy zastosować funkcję MoveMemory(...).
  3. Docelowy obszar pamięci wskazywany przez parametr Destination musi być wystarczająco duży, żeby zmieścić Length bajtów obszaru źródłowego, w przeciwnym wypadku może nastąpić przepełnienie bufora. Umożliwia to ataki typu DoS, a nawet wstrzyknięcie i wykonanie własnego kodu.
  4. Z w/w powodu funkcje kopiujące, które nie sprawdzają wielkości zapisywanego obszaru pamięci i mogące w efekcie końcowym wywołać krytyczne z punktu widzenia zabezpieczeń przepełnienia bufora zostały wciągnięte przez Microsoft na listę zakazanych funkcji.              Artykuł: Zakazane funkcje API z 06.12.2012 roku.