The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: Magnum on December 04, 2011, 08:07:45 PM

Title: Cannot create file that already exists.
Post by: Magnum on December 04, 2011, 08:07:45 PM
This says, "Cannot create file that already exists."


.386
.model flat, stdcall
option casemap :none   

include     \masm32\include\windows.inc
include     \masm32\include\user32.inc
include     \masm32\include\kernel32.inc
include     \masm32\include\advapi32.inc
include     \masm32\include\shlwapi.inc

includelib  \masm32\lib\user32.lib
includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\advapi32.lib
includelib  \masm32\lib\shlwapi.lib

.data

Icon_streams  db  "\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\IconStreams",0
Past_stream   db  "\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\PastIconsStream",0

.data?

ErrorString DB 256 DUP (?)

.code

start:

invoke SHDeleteKey,HKEY_CURRENT_USER,ADDR Icon_streams
invoke SHDeleteKey,HKEY_CURRENT_USER,ADDR Past_stream

invoke GetLastError

invoke FormatMessage,FORMAT_MESSAGE_FROM_SYSTEM, 0, eax, 0, offset ErrorString, SIZEOF ErrorString-1, 0
invoke MessageBox, 0, offset ErrorString, 0, 0

invoke ExitProcess,NULL

end start

Title: Re: Cannot create file that already exists.
Post by: bomz on December 04, 2011, 08:31:17 PM
Quote.386

.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\advapi32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\advapi32.lib

.data
szREGSZ db "REG_SZ",0
szTestKey db "Test Key",0
szOK db "Success.",0
szError db "Key not exist.",0

.data?
hKey dd ?
lpdwDisp dd ?

.code
start:

invoke RegOpenKeyEx,HKEY_CURRENT_USER,ADDR szTestKey,0,KEY_WRITE or KEY_READ,ADDR hKey
.if eax==ERROR_SUCCESS
invoke RegDeleteKey,HKEY_CURRENT_USER,ADDR szTestKey
.if eax==ERROR_SUCCESS
invoke MessageBox,0,ADDR szOK,ADDR szTestKey,MB_OK + MB_ICONASTERISK
.else
invoke MessageBox,0,0,0,0
.endif
invoke RegCloseKey,hKey
.else
invoke MessageBox,0,ADDR szError,0,0
.endif
exit:
invoke ExitProcess,0 ;
end start

Quote.386

.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\advapi32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\advapi32.lib

.data
szREGSZ db "REG_SZ",0
szTestKey db "Test Key",0
szOK db "Key create or already exist.",0

.data?
hKey dd ?
lpdwDisp dd ?

.code
start:

invoke RegCreateKeyEx,HKEY_CURRENT_USER,ADDR szTestKey,0,ADDR szREGSZ,0,KEY_WRITE or KEY_READ,0,ADDR hKey,lpdwDisp

.if eax==ERROR_SUCCESS
invoke MessageBox,0,ADDR szOK,ADDR szTestKey,MB_OK + MB_ICONASTERISK
invoke RegCloseKey,hKey
.else
invoke MessageBox,0,0,ADDR szTestKey,0
.endif

invoke ExitProcess,0
end start
(http://smiles.kolobok.us/light_skin/bye.gif)
Title: Re: Cannot create file that already exists.
Post by: MichaelW on December 04, 2011, 08:51:29 PM
Andy,

Since not all functions will clear the last-error code value on success, you need to check the return value from SHDeleteKey to know if an error occurred (a return value of 0 = ERROR_SUCCESS).

Title: Re: Cannot create file that already exists.
Post by: Magnum on December 04, 2011, 09:57:26 PM
EAX = A1h

Title: Re: Cannot create file that already exists.
Post by: dedndave on December 04, 2011, 10:50:30 PM
QuoteERROR_BAD_PATHNAME
161 (0xA1)

i assume the key you are trying to delete is empty
at any rate - the error indicates that the key does not exist
check your strings   :U

another possibility - if you are running 64-bit OS
is that the key is virualized under wow64
Title: Re: Cannot create file that already exists.
Post by: Magnum on December 05, 2011, 12:42:43 AM
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify]
"BalloonTip"=dword:00000005
"PastIconsStream"

Past_stream   db  "Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\PastIconsStream",0

I have a VB script that deletes the key and then it stops and restarts explorer.

Maybe that is the problem.
Title: Re: Cannot create file that already exists.
Post by: Gunner on December 05, 2011, 12:53:52 AM
remove the first backslash from the paths and it should work!  They should be:
Icon_streams  db  "Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\IconStreams",0
Past_stream   db  "Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\PastIconsStream",0

Title: Re: Cannot create file that already exists.
Post by: Magnum on December 05, 2011, 01:04:54 AM
Thanks, that was easy.