Professional Documents
Culture Documents
Registry Functions
F or Visual Basic
:ﻟﻠﻤﺮﺍﺳﻠﺔ
SyntaxErr0x0@yahoo.com
ﺍﳌﻘﺪﻣﺔ
ﺑﺴﻢ ﺍﷲ ﻭﺍﻟﺼﻼﺓ ﻭﺍﻟﺴﻼﻡ ﻋﻠﻰ ﺭﺳﻮﻝ ﺍﷲ ﻭﻋﻠﻰ ﺁﻟﻪ ﻭﺻﺤﺒﻪ ﻭﻣﻦ ﺗﺒﻊ ﻫﺪﺍﻩ ﺇﱃ ﻳﻮﻡ
ﺍﻟﺪﻳﻦ.
ﺃﻣﺎ ﺑﻌﺪ:
ﰲ ﻗﺴﻢ ﺩﻭﺍﻝ ﺍﻟـ www.vb4arab.com ﻓﻘﺪ ﻗﺮﺃﺕ ﰲ ﻣﻨﺘﺪﻯ ﻓﻴﺠﻮﺍﻝ ﺑﻴﺴﻚ ﻟﻠﻌﺮﺏ
ﻓﻔﻜﺮﺕ ﺃﻥ ﺃﺟﻌﻞ ﺑﻌﻀﺎﹰ ﻣﻦ ﻭﻗﱵ ﻟﻺﺟﺎﺑﺔ ﻋﻦ Registry APIﺳﺆﺍﻝ ﻋﻦ ﺍﻟﺪﻭﺍﻝ ﺍﳋﺎﺻﺔ ﺑﺎﻟـ
ﻫﺬﺍ ﺍﻟﺴﺆﺍﻝ.
ﻣﻼﺣﻈﺔ :ﻟﻦ ﺃﺷﺮﺡ ﻣﺎﻫﻲ ﺍﻟـ Registryﻭﻛﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﻳﺪﻭﻳﺎﹰ ﺷﺮﺣﺎﹰ ﻣﻔﺼﻼﹰ ﻷﻧﻪ ﻳﻔﺘﺮﺽ
ﻣﻦ ﺍﻟﻘﺎﺭﻱ ﺃﻥ ﻳﻌﺮﻑ ﻫﺬﻩ ﺍﻷﺷﻴﺎﺀ ﻣﺴﺒﻘﺎﹰ.
ﻣﻼﺣﻈﺔ ﺃﺧﺮﻯ:
ﻟﻦ ﻳﺘﻢ ﺷﺮﺡ ﻛﻞ ﺍﻟﺪﻭﺍﻝ ﻣﻊ ﺃﱐ ﺃﻋﺪﻛﻢ ﺑﺸﺮﺣﻬﺎ ﰲ ﺃﻗﺮﺏ ﻭﻗﺖ ﻭﺫﻟﻚ ﻷﺳﺒﺎﺏ ﺧﺎﺻﺔ
ﺳﺄﺷﺮﺣﻬﺎ ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻟﺚ ﻭﻷﻱ ﺇﺳﺘﻔﺴﺎﺭﺍﺕ ﻳﺮﺟﻰ ﻣﺮﺍﺳﻠﱵ ﻋﻠﻰ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﺘﺎﱄ:
SyntaxErr0x0@yahoo.com
1
ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ
: ﺍﻟﺪﻭﺍﻝ ﺍﳌﺴﺘﺨﺪﻣﺔ
RegCloseKey RegConnectRegistry
RegCreateKey RegCreateKeyEx
RegDeleteKey RegDeleteValue
RegEnumValue RegEnumKey
RegEnumKeyEx RegFlushKey
RegGetKeySecurity RegLoadKey
RegNotifyChangKeyValue RegOpenKey
RegQueryInfoKey RegQueryMultipleValues
RegQueryValues RegQueryValueEx
RegReplaceKey RegRestoreKey
RegSaveKey RegSetKeySecurity
RegSetValue RegSetValueEx
RegUnloadKey
:ﺍﻟﺴﺠﻼﺕ ﺍﳌﺴﺘﺨﺪﻣﺔ
SECURITY_ATTRIBUTES FILETIME
SECURITY_DESCRIPTOR ACL
:ﺍﻟﺜﻮﺍﺑﺖ ﺍﳌﺴﺘﺨﺪﻣﺔ
HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER HKEY_DYN_DATA
HKEY_LOCAL_MACHINE HKEY_PERFORMANCE_DATA
HKEY_USERS ERROR_SUCCESS
ERROR_INSUFFICIENT_BUFFER MAX_PATH
READ_CONTROL KEY_SET_VALUE
KEY_QUERY_VALUE KEY_CREATE_SUB_KEY
KEY_CREATE_LINK KEY_ENUMERATE_SUB_KEYS
KEY_EVENT KEY_NOTIFY
SYNCHRONIZE STANDARD_RIGHTS_ALL
STANDARD_RIGHTS_WRITE STANDARD_RIGHTS_READ
KEY_READ KEY_WRITE
2
KEY_ALL_ACCESS REG_BINARY
REG_CREATED_NEW_KEY REG_DWORD
REG_DWORD_BIG_ENDIAN REG_DWORD_LITTLE_ENDIAN
REG_EXPAND_SZ REG_NOTIFY_CHANGE_NAME
REG_LINK REG_MULTI_SZ
REG_NONE REG_NOTIFY_CHANGE_LAST_SET
REG_NOTIFY_CHANGE_SECURITY REG_OPENED_EXISTING_KEY
REG_OPTION_BACKUP_RESTORE REG_OPTION_CREATE_LINK
REG_OPTION_NON_VOLATILE REG_OPTION_RESERVED
REG_OPTION_VOLATILE REG_REFRESH_HIVE
REG_RESOURCE_LIST REG_SZ
REG_WHOLE_HIVE_VOLATILE REG_LEGAL_CHANGE_FILTER
REG_LEGAL_OPTION REG_FULL_RESOURCE_DESCRIPTOR
REG_NOTIFY_CHANGE_ATTRIBUTES REG_RESOURCE_REQUIREMENTS_LIST
3
ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ
4
ﳝﻜﻦ ﺇﻧﺸﺎﺀ ﺃﻭ ﺗﻐﻴﲑﺍﻟـ keysﻭﺍﻟـ Valuesﻳﺪﻭﻳﺎﹰ ﺑﺴﻬﻮﻟﺔ ﻭﻟﻜﻦ ﻛﻴﻒ ﳝﻜﻦ ﻓﻌﻞ ﻛﻞ ﺫﻟﻚ ﺑﻠﻐﺔ
Visual Basic؟
ﻣﻼﺣﻈﺔ :ﳝﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﰲ ﺍﻟـ Registryﺑﺪﻭﻥ ﺇﻏﻼﻕ ﺍﻟـ Keyﻭﺫﻟﻚ ﺑﺎﺳﺘﻌﻤﺎﻝ ﺍﻟﺪﺍﻟﺔ
ﻭﻟﻜﻦ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺗﺴﺘﺨﺪﻡ ﻣﺼﺎﺩﺭ ﺍﻟﻨﻈﺎﻡ ﺑﺸﻜﻞ ﻛﺒﲑ ﺣﻴﺚ ﻳﺮﺍﻋﻰ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ RegFlushKey
5
predefined keys ﻭﺗﺴﻤﻰ ﺍﻟـ keysﺍﻟﺴﺎﺑﻘﺔ ﺑـ
ﻭﺍﻟﺪﻭﺍﻝ ﺍﳌﺴﺘﺨﺪﻣﺔ ﻟﻔﺘﺢ ﺍﻟـ keysﻫﻲ :
RegOpenKey, RegOpenKeyEx
RegCreateKey,RegCreateKeyEx
ﻛﺘﺎﺑﺔ ﻭﺣﺬﻑ ﺍﻟﺒﻴﺎﻧﺎﺕ: .2
ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻭﺍﻝ ﺍﻟﺘﺎﻟﻴﺔ:
key RegSetValueEx, RegSetValueﻭﺫﻟﻚ ﻟﺘﺨﺼﻴﺺ ﺑﻴﺎﻧﺎﺕ ) (Dataﻟـ
ﻣﻌﲔ.
:RegSetValueﺗﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﻨﺼﻮﺹ ﻓﻘﻂ ،ﻭﺳﺄﰐ ﺷﺮﺣﻬﺎ ﰲ ﺣﻴﻨﻬﺎ.
:RegSetValueExﳝﻜﻨﻬﺎ ﻛﺘﺎﺑﺔ ﺃﻱ ﻧﻮﻉ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺑﺈﻣﻜﺎﺎ ﺇﻧﺸﺎﺀ
keyﻭ valueﺧﺎﺹ ﺑﻪ ﰲ ﻧﻔﺲ ﺍﻟﻮﻗﺖ!!!
RegDeleteValue ﻭﳊﺬﻑ Valueﻣﻦ keyﺗﺴﺘﺨﺪﻡ ﺍﻟﺪﺍﻟﺔ
ﻣﻊ ﻣﻼﺣﻈﺔ ﺃﻥ ﺍﻟـ keyﺍﶈﺬﻭﻑ RegDeleteKey ﻭﳊﺬﻑ keyﻧﺴﺘﺨﺪﻡ ﺍﻟﺪﺍﻟﺔ
ﻻﻳﺘﻢ ﺇﺯﺍﻟﺘﻪ ﺣﱴ ﻳﺘﻢ ﻗﻔﻞ ﺁﺧﺮ handleﻟﻪ.
RegSetKeySecurity ﻭﻟﺘﻐﻴﲑ ﺃﻣﺎﻥ ﺍﻟـ keysﻧﺴﺘﺨﺪﻡ
6
ﳝﻜﻦ ﺟﻠﺐ ﺍﻟـ subkeysﻟـ keyﻣﻌﲔ ﺣﱴ ﻳﺘﻢ ﺇﳚﺎﺩ keyﻣﻌﲔ ﻭﺃﺧﺬ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻨﻪ
ﺃﻣﺎ ﺍﻷﻭﱃ RegEnumKeyEx ﻭﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﺍﻟﺔ RegEnumKey :ﺃﻭ ﺍﻟﺪﺍﻟﺔ
Classes ﺗﺮﺟﻊ ﺍﻟـ subkeysﻓﻘﻂ ﻭﺍﻟﺜﺎﻧﻴﺔ ﺗﺮﺟﻊ ﺍﻟـ subkeysﻣﻊ ﺍﻟـ
ﻣﻌﻴﻨﺔ ،ﺍﻟﱪﻧﺎﻣﺞ ﳝﻜﻦ ﺃﻥ ﺗﺴﺘﺪﻋﻲ ﺍﻟﺪﺍﻟﺔ subkey ﻹﺭﺟﺎﻉ ﺑﻴﺎﻧﺎﺕ ﻣﻔﺼﻠﺔ ﺣﻮﻝ
RegQueryInfoKey
ﻭﺍﻟﺪﺍﻟﺔ RegGetKeySecurityﺗﺮﺟﻊ ﻧﺴﺨﺔ ﻣﻦ ﺍﻟـ SecurityDescriptionﺍﻟﱵ
key ﲢﻤﻲ ﺍﻟـ
RegEnumValue ﻭﳉﻠﺐ ﺍﻟـ valuesﻟـ keyﺗﺴﺘﺨﺪﻡ ﺍﻟﺪﺍﻟﺔ
RegCloseKey ﺇﻏﻼﻕ ﺍﻟـ keyﻳﺘﻢ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﺍﻟﺔ .3
ﻟﻘﺪ ﻗﻤﺖ ﺑﺸﺮﺡ ﻋﺎﻡ ﻋﻠﻰ ﺑﻌﺾ ﺍﻟﺪﻭﺍﻝ ﻭﺇﻟﻴﻚ ﺑﺸﺮﺡ ﻣﻔﺼﻞ.
7
ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻟﺚ
8
**ﺍﻟﺒﺎﺏ ﺍﻷﻭﻝ :ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟـ **Keys
9
ﺍﻟﺪﺍﻟﺔ ﺍﻟﺜﺎﻧﻴﺔRegCreateKey :
ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺗﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ keyﳏﺪﺩ ﺃﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻣﻮﺟﻮﺩﺍﹰ ﻓﺈﺎ ﺗﻘﻮﻡ ﺑﻔﺘﺤﻪ.
ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﻣﺘﻮﺍﻓﻘﺔ ﻣﻊ ﻧﻈﺎﻡ .Windows 3.1ﺃﻣﺎ ﺍﻟﱪﺍﻣﺞ ﺍﳌﻌﺘﻤﺪﺓ ﻋﻠﻰ win32ﻓﻤﻦ ﺍﻷﻓﻀﻞ
ﻭﺍﻟﱵ ﺳﺄﻗﻮﻡ ﺑﺸﺮﺣﻬﺎ ﺑﻌﺪ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ. RegCreateKeyEx ﺇﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﺍﻟﺔ
ﺍﻟﻘﻴﻤﺔ ﺍﳌﺮﺟﻌﺔ:
ﺇﺫﺍ ﳒﺤﺖ. ERROR_SUCCESS ﺗﺮﺟﻊ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺍﻟﻘﻴﻤﺔ
ﻣﻼﺣﻈﺔ:
ﳝﻜﻦ ﺇﻧﺸﺎﺀ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟـ Keysﺍﳌﺘﺪﺍﺧﻠﺔ.
10
ﺍﻟﺪﺍﻟﺔ ﺍﻟﺜﺎﻟﺜﺔRegCreateKeyEx :
ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺗﺸﺒﻪ ﺍﻟﺪﺍﻟﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻣﻦ ﺣﻴﺚ ﺃﺎ ﺗﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ Keyﺃﻭ ﺗﻔﺘﺤﻪ ﺇﻥ ﻛﺎﻥ ﻣﻮﺟﻮﺩﺍﹰ
ﻭﺗﺴﺘﻘﺒﻞ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺗﺴﻊ ﻣﻌﺎﻣﻼﺕ :
hKey, lpSubKey, vReserved, lpClass, dwOption, samDesired,
lpSecurityAttributes, phkResult, lpdwDisposition
11
REG_OPTION_NON_VOLATILE
ﺍﳌﻔﺘﺎﺡ ﺍﳌﻨﺸﺄ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺜﺎﺑﺖ ﻟﻴﺲ ﻣﻦ ﺍﻟﺴﻬﻮﻟﺔ ﺿﻴﺎﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﺍﳌﻮﺟﻮﺩﺓ ﺑﻪ ﻭﻫﺬﺍ ﻫﻮ ﺍﳋﻴﺎﺭ ﺍﻻﻓﺘﺮﺍﺿﻲ .ﺣﻴﺚ ﺃﻥ ﺍﳌﻌﻠﻮﻣﺎﺕ ﲣﺰﻥ ﰲ
ﻣﻠﻒ ﻭﲢﻤﻰ ﺃﻭ ﲢﻔﻆ ﻋﻨﺪﻣﺎ ﻳﻌﺎﺩ ﺗﺸﻐﻴﻞ ﺍﻟﻨﻈﺎﻡ.
REG_OPTION_VOLATILE
ﺍﻟـ Keyﺍﳌﻨﺸﺄ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺜﺎﺑﺖ ﲣﺰﻥ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻏﲑ ﳏﻔﻮﻇﺔ
ﺣﻔﻆ ﺟﻴﺪ
ﻭﻫﺬﺍ ﺍﻟﺜﺎﺑﺖ ﻳﺘﻢ ﲡﺎﻫﻠﻪ ﺇﺫﺍ ﻛﺎﻥ ﺍﻟـ keyﻣﻮﺟﻮﺩ.
REG_OPTION_BACKUP_RESTORE
samDesired ﺇﺫﺍ ﻛﺎﻧﺖ ﻫﺬﺍ ﺍﻟﺜﺎﺑﺖ ﻣﻮﺟﻮﺩ ﻓﺈﻥ ﺍﻟﺪﺍﻟﺔ ﺗﺘﺠﺎﻫﻞ ﺍﳌﻌﺎﻣﻞ
Restore, Backup ﻭﺗﻌﻄﻲ ﺻﻼﺣﻴﺔ ﻓﺘﺢ ﺍﻟـ keyﻋﻠﻰ ﺃﺳﺎﺱ
12
ﻫﺬﺍ ﺍﳌﻌﺎﻣﻞ ﳛﺪﺩ ﻫﻞ ﺍﻟـ handleﺍﳌﺮﺟﻊ ﳝﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻣﻮﺭﻭﺛـﺎﹰ ﺑﻮﺍﺳﻄﺔ
ﺍﳌﻌﺎﳉﺔ ﺍﻹﺑﻦ )ﻭﻟﻦ ﺃﻓﺼﻞ ﻫﺬﻩ ﺍﻟﻨﻘﻄﺔ ﳌﺎ ﻳﺘﻄﻠﺒﻪ ﻣﻦ ﻭﻗﺖ ﻭﺟﻬﺪ(.
ﺃﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻫﺬﺍ ﺍﳌﻌﺎﻣﻞ NULLﻓﺈﻥ ﺍﻟـ handleﻻ ﳝﻜﻦ ﺃﻥ ﻳﻮﺭﺙ ﳌﻌﺎﳉﺔ
ﺇﺑﻦ.
ﻭﺳﺄﺷﺮﺡ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺔ ﺑﻌﺪ ﻗﻠﻴﻞ.
ﲢﺖ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ : Windows NT
ﺍﻟﻌﻨﺼﺮ lpSecurityDescriptorﰲ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺔ ﻳﻮﺿﺢ ﺻﻔﺔ ﺍﻷﻣﺎﻥ
Defaults ﻟﻠﻤﻔﺘﺎﺡ ﺍﳉﺪﻳﺪ ﻭﺇﻥ ﻛﺎﻥ NULLﻓﺈﻥ ﺍﻷﻣﻦ ﻳﺄﺧﺪ ﺍﻟـ
13
ﻣﻼﺣﻈﺔ:
ﻋﻨﺪ ﺇﻧﺸﺎﺀ ﺃﻭ ﻓﺘﺢ ﺍﻟـ Keysﺍﺳﺘﺨﺪﻡ
RegOpenKeyEx ﺃﻭ RegCreateKeyEx
ﻭﻻﺗﺴﺨﺪﻡ
RegOpenKey ﻭ RegCreateKey
14
SECURITY_ATTRIBUTES ﺍﻟﺘﺮﻛﻴﺒﺔ
ﺗﺘﻜﻮﻥ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺔ ﻣﻦ :
Long ﻣﻦ ﻧﻮﻉ nLength
ﺍﻟﻌﻨﺼﺮ : nLength
ﻳﻮﺿﻊ ﺑﻪ ﺣﺠﻢ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺔ ﺑﺎﻟﺒﺎﻳﺖ ،ﻭﳚﺐ ﻋﻠﻴﻚ ﻭﺿﻊ ﺣﺠﻢ ﻫﺬﻩ
. Len ﺍﻟﺘﺮﻛﻴﺒﺔ ﰲ ﻫﺬﺍ ﺍﳌﺘﻐﲑ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﺍﻟﺔ
ﺍﻟﻌﻨﺼﺮ : lpSecurityDescriptor
ﻳﺸﲑ ﺇﱃ ﺻﻔﺔ ﺍﻷﻣﺎﻥ ﺍﻟﱵ ﻳﺘﺤﻜﻢ ﺎ ﺍﻟـ Objectﺍﻟﺬﻱ ﻳﺘﺤﻜﻢ
ﲟﺸﺎﺭﻛﺘﻪ.
ﻭﺇﻥ ﻛﺎﻥ NULLﻓﺈﻥ ﺍﻟﺪﺍﻟﺔ ﻗﺪ ﺗﻌﲔ ﺍﻷﻣﻦ ﺍﻷﺳﺎﺳﻲ ) ( Default
ﻟﻠﱪﻧﺎﻣﺞ ﺍﳌﺴﺘﺪﻋﻲ ﻟﻠﺪﺍﻟﺔ.
Long ﻣﻦ ﻧﻮﻉ bInheritHandle ﺍﻟﻌﻨﺼﺮ
ﲢﺪﺩ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﺍﻟـ Handleﺍﳌﺮﺟﻊ ﻣﻮﺭﻭﺙ ﻋﻨﺪ ﺇﻧﺸﺎﺀ ﺍﳌﻌﺎﳉﺔ
ﺍﳉﺪﻳﺪﺓ ﺃﻡ ﻻ ﻓﺈﺫﺍ ﻛﺎﻥ TRUEﻓﺈﻥ ﺍﳌﻌﺎﳉﺔ ﺍﳉﺪﻳﺪﺓ ﺗﻮﺭﺙ ﺍﻟـ
.Handle
15
ﺍﻟﺪﺍﻟﺔ ﺍﻟﺮﺍﺑﻌﺔRegDeleteKey :
ﻭﲨﻴﻊ ﳏﺘﻮﻳﺎﺗﻪ. key ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﲤﺴﺢ ﺍﻟـ Windows 9x ﰲ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ
ﺃﻣﺎ ﰲ Widnows NTﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﻻﳝﻜﻦ ﺃﻥ ﲤﺴﺢ ﺍﻟـ keyﺍﳌﻮﺟﻮﺩ ﺑﻪ ﻣﻔﺎﺗﻴﺢ ﻓﺮﻋﻴﺔ
ﺇﺫ ﻋﻠﻴﻚ ﻣﺴﺢ ﺍﻟـ keysﺍﻟﺪﺍﺧﻠﻴﺔ ﰒ ﺍﳋﺎﺭﺟﻴﺔ.
ﻣﺴﺒﻘﺎﹰ
ﺍﺳﻢ ﺍﳌﻔﺘﺎﺡ ﺍﳌﺮﺍﺩ ﺣﺬﻓﻪ. String ﻣﻦ ﻧﻮﻉ lpSubKey
ﺍﻟﻘﻴﻤﺔ ﺍﳌﺮﺟﻌﺔ:
ERROR_SUCCESS ﺇﺫﺍ ﳒﺤﺖ ﺍﻟﺪﺍﻟﺔ ﻓﺈﺎ ﺗﺮﺟﻊ ﻗﻴﻤﺔ
16
ﺍﻟﺒﺎﺏ ﺍﻟﺜﺎﱐ :ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟـ Values
ﻣﻼﺣﻈﺎﺕ:
ﻭﻗﺒﻞ ﺇﻏﻼﻗﻪ ﻷﻧﻚ ﻟﻮ ﺃﻗﻔﻠﺖ ﺍﻟـ Key ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﺪﻭﺍﻝ ﺑﻌﺪ ﻓﺘﺢ ﺍﻟـ
Keyﻓﻠﻦ ﺗﺴﺘﻄﻴﻊ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻪ ﺇﻻ ﺇﺫﺍ ﰎ ﻓﺘﺤﻪ ﻣﺮﺓ ﺃﺧﺮﻯ.
17
ﺗﺴﺘﻘﺒﻞ 5ﻣﻌﺎﻣﻼﺕ: RegSetValue ﺍﻟﺪﺍﻟﺔ
ﻣﻔﺘﻮﺡ ﺣﺎﻟﻴﺎﹰ. key ﳛﻤﻞ ﺍﻟـ handleﻟـ hKey
ﺑﺎﻟﺒﺎﻳﺖ ﻣﻊ ﻣﺮﺍﻋﺎﺓ ﺃﻧﻪ ﻻ ﻳﺘﻢ ﺣﺴﺎﺏ ﺣﺮﻑ lpData ﳛﺘﻮﻱ ﻋﻠﻰ ﻃﻮﻝ cbData
ERROR_SUCCESS ﺍﻟﻘﻴﻤﺔ ﺍﳌﺮﺟﻌﺔ :ﺇﺫﺍ ﳒﺤﺖ ﺍﻟﺪﺍﻟﺔ ﻓﺈﺎ ﺗﺮﺟﻊ ﺍﻟﻘﻴﻤﺔ :
ﺇﺫﺍ ﻛﺎﻥ ﺍﻠﺪ ﻏﲑ ﻣﻮﺟﻮﺩ ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺗﻨﺸﺌﻪ. .1 ﻣﻼﺣﻈﺎﺕ:
.2ﻃﻮﻝ ﺍﻟـ Valueﳏﺪﺩ ﻋﻠﻰ ﺣﺴﺐ ﺍﻟﺬﺍﻛﺮﺓ.
18
ﳚﺐ ﻋﻠﻴﻚ ﺃﻥ ﻻ ﲣﺰﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﱵ ﻫﻲ ﺃﻃﻮﻝ ﻣﻦ 2048ﺑﺎﻳﺖ ﰲ .3
ﺍﻟـ Regsitrtﺇﺫ ﺃﻥ ﺫﻟﻚ ﻳﻘﻠﻞ ﻣﻦ ﺳﺮﻋﺔ ﺍﳉﻬﺎﺯ ﻭﺍﳊﻞ ﻫﻮ ﺃﻥ ﺗﻘﻮﻡ
ﲝﻔﻈﻬﺎ ﰲ ﻣﻠﻔﺎﺕ ﻭﲣﺰﻥ ﺃﲰﺎﺀﻫﺎ ﰲ ﺍﻟـ .Registry
19
:RegSetValueEx ﺍﻟﺪﺍﻟﺔ ﺍﻟﺴﺎﺩﺳﺔ:
ﻣﻔﺘﻮﺡ ﺣﺎﻟﻴﺎﹰ ،ﻭﻛﺬﻟﻚ key ﲣﺰﻥ ﺑﻴﺎﻧﺎﺕ ) (Dataﰲ ﺣﻘﻞ ﺍﻟﻘﻴﻤﺔ ) (Value Fieldﻟـ
ﳝﻜﻨﻬﺎ ﲣﺼﻴﺺ ﻣﻌﻠﻮﻣﺎﺕ ﺇﺿﺎﻓﻴﺔ ﻋﻦ ﺍﻟـ Valuesﻟـ keyﳏﺪﺩ.
ﺗﺴﺘﻘﺒﻞ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﺍﳌﻌﺎﻣﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﻟـ handleﻟـ keyﻣﻔﺘﻮﺡ ﻣﺴﺒﻘﺎﹰ. :hKey
ﻫﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﻧﺺ ﳛﻤﻞ ﺍﺳﻢ ﺍﻟﻘﻴﻤﺔ ﺍﳌﺮﺍﺩ ﺗﻐﻴﲑﻫﺎ ﻭﺇﻥ ﱂ ﺗﻜﻦ :lpValueName
ﻣﻮﺟﻮﺩﺓ ﻓﺈﻥ ﺍﻟﺪﺍﻟﺔ ﺗﻘﻮﻡ ﺑﺈﻧﺸﺎﺀﻫﺎ ﻓﺈﺫﺍ ﻛﺎﻧﺖ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ
REG_SZ vbNullStringﻭﻛﺎﻧﺖ ﻗﻴﻤﺔ ﺍﳌﻌﺎﻣﻞ dwTypeﻫﻲ
RegSetValue ﻓﺈﻥ ﺍﻟﺪﺍﻟﺔ ﺗﻘﻮﻡ ﺑﺎﻟﻌﻤﻞ ﻛـ
ﻫﻮ ﻣﺘﻐﲑ ﳏﺠﻮﺯ ﻭﳚﺐ ﺃﻥ ﻳﻜﻮﻥ ﺻﻔﺮﺍﹰ. :Reserved
ﳛﺪﺩ ﻧﻮﻉ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﻟﱵ ﺳﺘﺨﺰﻥ ﰲ ﺍﻟـ valueﻭﻫﺬﺍ ﺍﳌﻌﺎﻣﻞ :dwType
ﳚﺐ ﺃﻥ ﻳﻜﻮﻥ ﻭﺍﺣﺪﺍﹰ ﻣﻦ ﺍﻟﻘﻴﻢ ﺍﻟﺘﺎﻟﻴﺔ:
ﻗﻴﻢ ﺛﻨﺎﺋﻴﺔ REG_BINARY
ﺭﻗﻢ ﻣﻦ 32ﺑﺖ REG_DWORD
ﺭﻗﻢ ﻣﻦ 32ﺑﺖ REG_DWORD_LITTLE_ENDIAN
ﺭﻗﻢ ﻣﻦ 32ﺑﺖ REG_DWORD_BIG_ENDIAN
ﺳﻠﺴﻠﺔ ﺣﺮﻓﻴﺔ ﲢﻮﻱ ﻋﻠﻰ ﻣﺘﻐﲑﺍﺕ REG_EXPAND_SZ
ﺗﺪﻝ ﻋﻠﻰ ﻣﺮﺍﺟﻊ ﻣﺜﻞ ""%PATH%
Unicode ﺭﺍﺑﻂ ﺑﺮﻣﻮﺯ REG_LINK
20
ﻣﻊ ﻣﻼﺣﻈﺔ ﻫﺎﻣﺔ ﺟﺪﺍﹰ :ﳚﺐ ﺃﻥ ﻳﺒﻌﺖ ﻫﺬﺍ ﺍﳌﻌﺎﻣﻞ ﺑﺎﻟﻘﻴﻤﺔ
ﺇﺫ ﺑﺪﻭﻥ ﻫﺬﻩ )ByVal(lpData ﻭﻟﻴﺲ ﺑﺎﳌﺮﺟﻊ ﺃﻱ ﺑﺎﺳﺘﺨﺪﺍﻡ
ﺍﻟﻄﺮﻳﻘﺔ ﻟﻦ ﲣﺰﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺻﺤﻴﺤﺔ ﻭﺳﻨﺮﻯ ﺃﺎ ﺳﺘﻈﻬﺮ ﻋﻠﻰ
ﻭﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻡ ByValﺗﻈﻬﺮ ﺍﻟﺒﻴﺎﻧﺎﺕ Garbage ﺷﻜﻞ
ﺻﺤﻴﺤﺔ
ﻃﻮﻝ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﳌﺮﺍﺩ ﻣﺒﻌﻮﺛﺔ ﰲ lpDataﺑﺎﻟﺒﺎﻳﺖ ﻭﺇﻥ ﻛﺎﻧﺖ ﺍﻟﺒﻴﺎﻧﺎﺕ :cbData
ﻣﻦ ﻧﻮﻉ REG_SZﺃﻭ REG_EXPAND_SZﺃﻭ
ﳚﺐ ﺃﻥ ﳛﺘﻮﻱ ﺍﻟﻄﻮﻝ ﻋﻠﻰ ﺍﳊﺮﻑ ﺍﳌﻨﺘﻬﻲ ﺑﻪ REG_MULT_SZ
ﺍﻟﺴﻠﺴﺔ ﺍﳊﺮﻓﻴﺔ.
ﺍﻟﻘﻴﻤﺔ ﺍﳌﺮﺟﻌﺔ:
ﺇﺫﺍ ﳒﺤﺖ ﻓﺘﺮﺟﻊ ERROR_SUCCESSﻭ ﺇﻻ ﻓﻘﻴﻤﺔ ﻏﲑﻫﺎ.
21
ﺍﻟﺪﺍﻟﺔ ﺍﻟﺴﺎﺑﻌﺔRegDeleteVaue :
Registry ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﳌﺴﺢ ﻗﻴﻤﺔ ﻣﻦ ﺍﻟـ
ﻭﺗﺴﺘﻘﺒﻞ ﺍﳌﻌﺎﻣﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﻧﺘﻬﻰ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻟﺚ ﻭﺗﺮﻗﺒﻮﺍ ﺍﻟﻜﺘﺎﺏ ﺍﻟﺬﻱ ﻳﺸﺮﺡ ﻛﻞ ﻫﺬﻩ ﺍﻟﺪﻭﺍﻝ ﺷﺮﺡ ﻭﺍﻓﻴﺎﹰ ﺟﺪﺍﹰ.
ﻭﺳﺄﺑﺪﺃ ﰲ ﺫﻟﻚ ﺍﻟﻜﺘﺎﺏ ﻋﻨﺪﻣﺎ ﺃﻛﻤﻞ ﻣﺸﺮﻭﻉ ﺍﻟﺘﺨﺮﺝ ﺍﳊﺎﱄ.
22