Pour ce qui est de la rapidité, la VRAM est optimisée pour le blitting (affichage) rapide, mais ne sait pas extraire les pixels un par un.
La RAM sait le faire, mais est lente pour l´affichage.
D´ou l´utilité, si une image est en VRAM et que tu veux accéder aux pixels, de la rappatrier en RAM : c´est opération s´appelle le "LOCK"
Le UNLOCK est pour remettre l´image (modifiée) en VRAM.
Si tu es direct en RAM (dans ton cas), alors tu n´as pas besoin de lock (a priori)
Pour ce qui est du ulong passé dans PutPixel, et récupéré par GetPixel, c´est un unsigned long :
une variable de 4 octets en fait.
Cette variable est en fait le pixel : 4 octets = 1 octet pour le rouge, 1 octet pour le vert, 1 pour le bleu, 1 pour le alpha
Chacune de ces couleurs primaires est une valeur entre 0 et 255 qui représente la luminosité de chacune
(va dans paint, fait "couleurs personnalisées" et tu verras cela, ainsi que les nombres associés (dans paint, pas de canal Alpha)
Les fonctions en dessous : Pixel PR, PB etc... te permettent de décomposer et recomposer un pixel 
(je te conseille de travailler en 32 bits)