- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
My setup program created three keys in the Win 10 registry and I can read them but when I try to change the value of one of them I get an error 5 (lack of access priviledge). My code looks something like:
Subroutine ChkReg() use ifwinty use user32 use advapi32 implicit none Integer(4):: iret, iLen Integer(4):: lret Integer(4):: hKey = 0 character(255):: buff buff = " "C iLen = sizeof(buff) - 1 iret = RegOpenKeyEx (HKEY_CLASSES_ROOT, & "PDC"C, & 0, & KEY_EXECUTE, & ! only key that works LOC(hKey) ) if (iret == ERROR_SUCCESS) Then buff = " "C lret = RegQueryValueEx( hKey, "Data1"C, NULL, NULL, & LOC(buff), iLen ) if (iret /= ERROR_SUCCESS) Then buff = " "C lret = RegQueryValueEx( hKey, "Data1"C, NULL, NULL, & LOC(buff), iLen ) iret = MessageBox(NULL, buff, "Data1 Register PDC2", IDOK) else iret = MessageBox(NULL, buff, "Data1 Register PDC1", IDOK) end if Buff = "123456789"C iLen = 10 iret = RegSetValueEX ( hKey, "Data1"C, 0, REG_SZ, LOC(Buff), iLen) iret = RegCloseKey(hKey) End If End Subroutine ChkReg
All works well except the RegSetValueEX which returns an error code of 5. If I try a key of KEY_ALL_ACCESS then I get an error code 5 in RegOpenKeyEx. Any suggestions will be much appreciated.
Thanks,
Brooks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ilen will return the number of good bytes in buff if the return status is OK
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If I change where my setup program puts the entries to HKEY_CURRENT_USER then I can read and write but isn't this hkcu key cleared when I logoff?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If you want to set a value, then the handle to the key needs to have been opened with KEY_WRITE access (and perhaps others).
Try replacing `KEY_EXECUTE` on line 19 with `IOR(KEY_READ, KEY_WRITE)`.
KEY_ALL_ACCESS probably requests "too much" access, beyond the level permitted for a user that is not a "real" administrator.
(I would expect MessageBox to require null terminated strings.)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I changed Messagebox to ""C strings. But I have another problem. I am reading Ok but I sometimes get junk after the data that I want. How do I stop that?
Brooks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ilen will return the number of good bytes in buff if the return status is OK
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Andrew,
Thanks for that. I didn't check the ret code. I have adapted a Hash sort routine from Numerical Recipies and it works really well. I decided to extend the code to sort arrays of strings without shuffling them around by using an integer index array. The sort seems to work except for the last element in the string and it doesn't want to get sorted correctly. Would you mind looking at it and see where my logic fails. I'll zip both the working version and the non-working array of strings one. This has stumpted me for several days.
Thank you very much.
Brooks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It still doesn't work.See:
iLen = 20 Buff = ""C iret = RegQueryValueEx( hKey, "Data4"C, NULL, NULL, LOC(Buff), iLen ) if (iret == ERROR_SUCCESS) Then myBuff = Buff(1:iLen-1) write(Buff,100) 'iLen = ', iLen, myBuff, iret 100 format (a,i2,5x,a,i5) iret = MessageBox(NULL, Buff // "x1"C, "Data4 Query"C, MB_OK) else iret = RegQueryValueEx( hKey, "Data4"C, NULL, NULL, LOC(MySN2), iLen ) myBuff = Buff(1:iLen-1) write(Buff,100) 'iLen = ', iLen, myBuff, iret iret = MessageBox(NULL, Buff // "x2"C, "Data4 Query"C, MB_OK) end if
If I type Buff it appears as 1000 followed by some garbage.
Brooks
I repeated the RegQueryValueEx because the CVF Guide to Creating Windows Applications said it was wise.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
of course these are preceded by:
buff = " "C iLen = sizeof(buff) - 1 iret = RegOpenKeyEx (HKEY_CURRENT_USER, & "PDC"C, & 0, & KEY_ALL_ACCESS, & LOC(hKey) ) if (iret == ERROR_SUCCESS) Then
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Andrew,
When I put a LOC() around iLen, everything worked correctly. Thanks all.
Brooks
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page