|
|
Hi. I need to convert char* to UCHAR[]. Specifically: from a Loadstring to a UCHAR []. Any suggestions?
|
|
|
|
|
|
Did that. It said "error C2440: '=' : cannot convert from 'UCHAR *' to 'UCHAR [256]'". I need it to be converted to UCHAR [256].
|
|
|
|
|
can you give me a code snippet so I can see more specifically what you want to do? Thanks
|
|
|
|
|
Here's what I'm trying to do:
This code cannot be changed. It works for other purposes, such as char arrays, as well as needing this code to work for UCHAR arrays.
//
CCharHandler::CCharHandler(int res,int size,char *Def)
{
if(size<256)
{
memset(BufferLoadString,0,size);
HMODULE hReferenceLib = LoadLibrary("c:\\DLLCreated.dll");
if(hReferenceLib != NULL)
{
LoadString(hReferenceLib,res,BufferLoadString,size);
FreeLibrary(hReferenceLib);
if(BufferLoadString==NULL)
strncpy(BufferLoadString,Def,size);
}
else
strncpy(BufferLoadString,Def,size);
}
}
//
This code is replaceable. Type of variable is not:
//
UCHAR testchar[] = "OK\r";
//
The string inside quotes is what needs to be replaced. If I can do this without changing UCHAR[] to UCHAR[256] would be good. However, length is unknown. The line after replacement should read something close to:
//
CCharHandler szErrorLoadMessage2(ID_CompiledResource_20001,255,"unable to load ccures");
MessageBox(NULL,szErrorLoadMessage2.BufferLoadString,"",MB_OK);
UCHAR *szLibUCHAR[256];
//
BufferLoadString in the class is defined as:
//
char BufferLoadString[256];
//
Class works. Converting char array to uchar array is what I need help with.
|
|
|
|
|
you could write your own :
UCHAR* <font color=blue>operator</font> UCHAR* (<font color=blue>const char</font>*) {
<font color=green>
}
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
I need to be able to create a virtual, temporary disk partition entirely in memory but have it appear to an application as an ordinary disk partition. The idea is to allow the application to create and mainpulate files that vanish when the app exits.
Jim Scott
|
|
|
|
|
check into isoloated storage in the .net framework
|
|
|
|
|
Hi,
There is one solution to this problem..
There is a command called/program subst. you can execute this to create a virtual drive and then you can delete this drive.
Here I have given How I will do it using ms-dos.. (On Windows 2000)
run command or CMD from run.
c:\> subst s: d:\mydirectory
Now you can see s: drive in my computer which will have access to d:\mydirectory.. you can also remove this virtual drive..
Try is it possible to execute a dos command using your programming language. If you can, you can do it.
" Action without vision is only passing time,
Vision without action is merely day dreaming,
But vision with action can change the world "
- Words from Nelson Mandela
Thanks & Regards,
Gopalakrishnan
|
|
|
|
|
Hi all,
I don't see my exe file in debug or release.....no errors when I build or compile it using release or debug...And now when I run or execute my application using exe file...I don't see it there in release or debug
I don't know why....
Please help
Thanks in advance
Preeti9
|
|
|
|
|
Do you mean you don't see the file ? You've changed the path you build to.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
You may check the path!
学阿
|
|
|
|
|
Yes,
I can't see the file....but you know what, I am trying to execute a dll file, and we can't execute a DLL file....
Thanks
Preeti9
|
|
|
|
|
Hi Preeti9,
What do you mean? I couldn't understand.. You CANNOT execute a dll file?. I need more info pls..
" Action without vision is only passing time,
Vision without action is merely day dreaming,
But vision with action can change the world "
- Words from Nelson Mandela
Thanks & Regards,
Gopalakrishnan
|
|
|
|
|
Good afternoon, all
Has anyone seem this before?
error LNK2001: unresolved external symbol _WNetConnectionDialog@8
would it be some kind of the link that I am missing on the setting? or missing certain include file?
thanks!
|
|
|
|
|
I'm guessing that you've added a call to WNetConnectionDialog recently. The actual implementation of different parts of the Windows API are in different .dll files, and if you call one of the less used functions, you may have to instruct the linker to include the corresponding .lib file. In this case, you'll need to make sure you link with mpr.lib .
|
|
|
|
|
|
ur r missing Mpr.lib u can refer to msdn also
|
|
|
|
|
thanks and have a good weekend!
|
|
|
|
|
I have device driver and I want to write in a file from within the driver.
I am using ZwCreateFile()
ZwWriteFile()
ZwClose() functions.
When I call the InitializeObjectAttributesfunction()
i do not know how should the object name look like.
I mean if my file name is: D:\\status.txt or something like this:
\Device\HarddiskVolume1\status.txt
I want to ask now if these are the functions I should use when writting in a file from the kernel:
Here is a piece of code.
Can someone tell me what I do wrong?
<br />
<br />
NTSTATUS WriteStatusInFile(<br />
IN PCWSTR FileName,<br />
IN HANDLE hProcessId<br />
)<br />
{<br />
UNICODE_STRING ObjN;<br />
OBJECT_ATTRIBUTES ObjAttrib;<br />
UNICODE_STRING ObjName;<br />
IN HANDLE hFile;<br />
IN IO_STATUS_BLOCK StatBlock,WStatBlock;<br />
RtlInitUnicodeString(&ObjN,L"\\D:\\status.txt");<br />
InitializeObjectAttributes(&ObjAttrib,&ObjN, OBJ_KERNEL_HANDLE , NULL, NULL);<br />
<br />
<br />
ZwCreateFile(&hFile,<br />
FILE_WRITE_DATA|FILE_APPEND_DATA,<br />
&ObjAttrib,<br />
&StatBlock,<br />
0,<br />
FILE_ATTRIBUTE_NORMAL,<br />
FILE_SHARE_WRITE,<br />
FILE_CREATE |FILE_OPEN,<br />
FILE_SEQUENTIAL_ONLY,<br />
NULL,<br />
0<br />
);<br />
ZwWriteFile(<br />
hFile,<br />
NULL,<br />
NULL,<br />
NULL,<br />
&WStatBlock,<br />
L"Process Created or Terminated\n",<br />
sizeof("Process Created or Terminated\n"),<br />
NULL,<br />
NULL<br />
);<br />
<br />
ZwClose(hFile);<br />
<br />
return WStatBlock.Status;<br />
<br />
}<br />
Thanks in advance.
gabby
|
|
|
|
|
I don't understand why compiler(Microsoft Visual C++ 7.1) always makes code that cleans stack from parameters after execution function that declared as __stdcall:
void corrupt {
typedef HANDLE (__stdcall *FOO)(...); // function must be called via std convention
FOO foo = (FOO)GetProcAddress(LoadLibrary("kernel32.dll"), "GetModuleHandleA");
(*foo)(NULL);
}
Disassembly:
push offset foo.??_C@_0BB@HNEJOH> ; /ProcNameOrdinal = "GetModuleHandleA"
push offset foo.??_C@_0N@MDJJJHM> ; |/FileName = "kernel32.dll"
call near dword ptr ds:[<&KERNEL32.LoadLibraryA> ; |\LoadLibraryA
push eax ; |hModule = 0012F34C
mov edi, dword ptr ds:[<&KERNEL32.GetProcAddress> ; |kernel32.GetProcAddress
call near edi ; \GetProcAddress
push 0
call near eax ; GetModuleHandleA call
add esp, 4 ; An unwanted stack clean
After execution this function we'll see an access violation, because the return address will be wrong.
How can I fix that problem?
PS In project options __stdcall is default calling convention
|
|
|
|
|
you can mark individual functions as "cdecl". then, the calling code is responsible from cleaning the stack.
int __cdecl foo(int a);
Cleek | Image Toolkits | Thumbnail maker
|
|
|
|
|
They are always situated in system dll's
|
|
|
|
|
Hi
There is a flaw in your code. Thats why it is crashing. Basically compilier try to do second stack clean up..
typedef HANDLE (__stdcall *FOO)(...); // function must be called via std convention
The above declaration is the problem.. As is GetModuleHandleA is a standard function following pascal calling (Standard windows) convention.
In Pascal calling convention, the number of paramter we are passing to the function and the number of bytes required for that must be known before calling a function. By that way the called function will do clean up.
You have declared a function pointer like this..
typedef HANDLE (__stdcall *FOO)(...);
(...) which means the function would accept many number of parameters. C/CPP compiler would consider this this is a "C" calling convention. You are calling function in the dll.. That is following pascal calling convention..
When you call the function, the called function will unwind the stack as of pascal calling convention. And your calling function will also try to empty the non-existing stack(Already cleaned).. Thus a problem..
See my uncorrupt() function against your function.
void nocorrupt()
{
typedef HANDLE (__stdcall *FOO)(LPCTSTR); // function must be called via std convention
FOO foo = (FOO)GetProcAddress(LoadLibrary("kernel32.dll"), "GetModuleHandleA");
(*foo)(NULL);
}
This won't crash..
" Action without vision is only passing time,
Vision without action is merely day dreaming,
But vision with action can change the world "
- Words from Nelson Mandela
Thanks & Regards,
Gopalakrishnan
|
|
|
|