|
Firstly sorry for late reply,
It was really a very strange error, or one can call it a bug.
I just uninstalled the visual studio express ide and re-installed it. After that RtlZeroMemory error had gone. I guess some exception or bug had occured in the ide or compiler or god knows.
Thank you all, for sharing your precious time with me.
Regards,
Vishal
|
|
|
|
|
Richard MacCutchan wrote: let's hope one of the driver experts sees this question tomorrow
I am here.
See my reply...
==============================
Nothing to say.
|
|
|
|
|
Mmmh, this should be fine.
For testing use also:
RTL_QUERY_REGISTRY_TABLE query_table[2] = {0};
IS this the correct line, where the error comes from ???
Maybe it is:
Table[0].QueryRoutine = &XQueryRoutine;
And XQueryRoutine is wrong defined ?
|
|
|
|
|
Is it the same "Driver code to read registry and set up Win32 symbolic link" found [here?]
|
|
|
|
|
What is the exact error code of that error? I would like to read the definition of the error.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Hi,
Just from reading it appears to be ok, i'll try to compile the same later tomorrow. Meanwhile; what do you get if you comment the line that is giving the issue?
Which ddk / wdk are you using?
Cheers, AT
Cogito ergo sum
|
|
|
|
|
vishalgpt wrote: RtlZeroMemory
Why are you using kernel functions?
In user mode uses memset().
So, what is the address of your memory? Well, with arrays it is the array name, so query_table. How long is your memory? Well, it is twice the type, so sizeof(RTL_QUERY_REGISTRY_TABLE) * 2.
So, call:
memset(quary_table, 0, sizeof(RTL_QUERY_REGISTRY_TABLE) * 2);
Remember, think memory address, think size.
--edit--
OK, so you are writing a driver...
You really should understand memory (and the C language) better than this before you write drivers because you are going to be in a world of pain, and anyone who gets your driver on their system is too.
==============================
Nothing to say.
modified 5-Dec-11 6:30am.
|
|
|
|
|
How are you building this, wtith a source file and the DDk build macro?
==============================
Nothing to say.
|
|
|
|
|
Hi all
I am having two Arrays with different Length. I have some elements in both Array's In Ascending Order. Also Note that
this Elements are always in Ascending Order.
Example
-------
char array1[200];
char array2[100];
Now both arrays have some elements
array1[0]= "1";
array1[1]= "1.1";
array1[2]= "2";
array1[3]= "2.1";
array2[0]= "1";
array2[1]= "1.1";
array2[2]= "1.2";
array2[3]= "2";
array2[4]= "3";
array2[5]= "3.1";
array2[6]= "3.2";
Now i have to Arrange this Two Arrays such that.
Array1 Elements should be
-------------------------
array1[0]= "1";
array1[1]= "1.1";
array1[2]= ""; //Empty as element array2 contain element
array1[3]= "2"
array1[4]= "2.1"
array1[5]= "" //Empty as element array2 contain element
array1[6]= ""
array1[7]= ""
Array2 Elements should be
-------------------------
array2[0]= "1"
array2[1]= "1.1"
array2[2]= "1.2"
array2[3]= "2"
array2[4]= "" //Empty as element array1 contain element
array2[5]= "3"
array2[6]= "3.1"
array2[7]= "3.2"
-------------------------
How can i replace a Blank if any one Array Element have no Element at that Index.
Help me out.
Thanks,
Uday.
|
|
|
|
|
From the source and destination arrays you provided and your explanation, I do not understand what you're trying to do.
Could you rephrase your question or maybe another example would help.
|
|
|
|
|
The first thing you need to fix is your definitions of the arrays. You have defined both arrays as char and are then saying that each element holds a pointer to a string so your definition needs to be char* . To get the results you want, you first need to sort both arrays in order. Next create a third array (array3) containing all the elements of each array, but only 1 copy of duplicate elements (i.e. a merge of array1 and array2). Now iterate the elements of array3 and put empty strings in any elements which do not exist in array1. Repeat this process for array2 and you should end up with array3 and array4 containing what you want. There is most likely a simpler way to do this but I can't think of one off the top of my head.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Thank you Richard for giving me the Idea. Thank You Very Much.
|
|
|
|
|
Happy to help; don't forget to mark answer as accepted.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Hi,
If you'd you std::vector<double> you could just insert a item where needed.
Use a for loop on array two, where an item does not exits in array one, add it.
My two cents, AT
Cogito ergo sum
|
|
|
|
|
I can't seem to get the getline, to read a line of text from an open file.
I loaded these .h references
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <atlstr.h>
#include <string.h>
#include <tchar.h>
#pragma warning(disable:4786)
#include <iostream>
#include <fstream>
#include <string>
#include <Commctrl.h>
#include <Windows.h>
std::ofstream sqlDBFile;
sqlDBFile.open (szFilePath);
if (sqlDBFile.is_open() ) {
while (sqlDBFile.good() ) {
WCHAR pzSQLCommand[512];
while (sqlDBFile.good() ) {
WCHAR *szTempLine = NULL;
getline(sqlDBFile, &szTempLine, '\n');
if ((wcsncmp( szTempLine, L"GO", wcslen(L"GO") )) == 0) {
break;
}
else {
wcsncat_s(pzSQLCommand, wcslen(pzSQLCommand), szTempLine, wcslen(szTempLine) );
pzSQLCommand[wcslen(pzSQLCommand) + 1] = L'\0';
hr = pICommandText->SetCommandText( DBGUID_DBSQL, pzSQLCommand );
hr = pICommandText->QueryInterface( IID_ICommandProperties, ( void ** ) &pICommandProperties );
hr = pICommandText->Execute( NULL, IID_IRowset, NULL, &cRowsAffected, ( IUnknown ** ) &pIRowset );
}
}
}
sqlDBFile.close();
}
|
|
|
|
|
does this compile?
this doesn't seem right:
WCHAR *szTempLine = NULL;
the docs i see say getline takes a ref to a std::string as the string param, not a WCHAR ptr.
maybe:
wstring str;
getline(sqlDBFile, str, '\n');
?
|
|
|
|
|
I saw that too. I think there are 2 of them, 1 in string, and 1 in istream, and that the sample I found on c++ website was in mistake of it's use. I'm using fstream, and it does not exist in that header.
hmmmmmmmmmm
|
|
|
|
|
I got the getline to work, but I can't figure out how to advance to the next line.
And even if I can get to the next line, I can't figure out how to build the buffer with sql command text until I reach GO. Sure like that stringbuilder in asp.net.
The wifstream was suppose to return the unicode chars from the file, but I get ansi chars.
I'm close here, just need lots of refinement.
Any ideas are welcomed.
std::wifstream *sqlDBFile = new std::wifstream;
sqlDBFile->open(szFilePath);
if (sqlDBFile->is_open() ) {
while (sqlDBFile->good() ) {
WCHAR *pzSQLCommand = new WCHAR[1024];
while (sqlDBFile->good() ) {
WCHAR szAnsiBuffer[1024];
sqlDBFile->getline(szAnsiBuffer, 1024, L'\n');
int jdx = 0;
WCHAR *szBufferLine = new WCHAR[1024];
for (int i = 2; i < 1024; ++i) {
szBufferLine[jdx] = szAnsiBuffer[i];
i++;
jdx++;
}
int iLength = wcslen(szBufferLine);
szBufferLine[iLength] = L'\0';
if ((wcsncmp( szBufferLine, L"GO", wcslen(L"GO") )) != 0) {
wcsncat_s(pzSQLCommand, wcslen(pzSQLCommand), szBufferLine, wcslen(szBufferLine) );
pzSQLCommand[wcslen(pzSQLCommand) + 1] = L'\0';
break;
}
else {
hr = pICommandText->SetCommandText( DBGUID_DBSQL, pzSQLCommand );
hr = pICommandText->QueryInterface( IID_ICommandProperties, ( void ** ) &pICommandProperties );
hr = pICommandText->Execute( NULL, IID_IRowset, NULL, &cRowsAffected, ( IUnknown ** ) &pIRowset );
}
}
}
|
|
|
|
|
WCHAR szAnsiBuffer[1024];
sqlDBFile->getline(szAnsiBuffer, 1024, L'\n');
int jdx = 0;
WCHAR *szBufferLine = new WCHAR[1024];
for (int i = 2; i < 1024; ++i) {
szBufferLine[jdx] = szAnsiBuffer[i];
i++;
jdx++;
}
int iLength = wcslen(szBufferLine);
szBufferLine[iLength] = L'\0';
I'm not sure what you are trying to do here but most of this code is redundant. You have defined your input buffer as WCHAR so the resulting line will be Unicode, There is no need (in fact it's quite dangerous) for the copying character by character. All you need is:
WCHAR szBufferLine[1024];
sqlDBFile->getline(szBufferLine, 1024, L'\n');
This will leave you with a null terminated array of Unicode characters in szBufferLine , which you can then test, for the L"GO" string, and append to your command.
A couple of other things that you should also do:
1. When you create the pzSQLCommand buffer, is to add a null at the beginning so your wcsncat_s() calls do not trash your memory, thus:
WCHAR *pzSQLCommand = new WCHAR[1024];
*pzSQLCommand = L'\0';
2. Use the proper length setting of your destination buffer (see here[^]) in your wcsncat_s() call thus:
wcsncat_s(pzSQLCommand, 1024, szBufferLine, wcslen(szBufferLine) );
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
The code is for reading a sql text file, which is exported from sql management. By running the file, you can create a database and populate the data.
It's weird, or I'm reading the results wrong, but on get line, I get the every other character just like the socket program I wrote. I guess I am misinterpreting the data, and it is real unicode, with the 2nd character not programmed.
So one of the original code modules I had was like yours except for the small changes, but I was using ofstream, that kept erasing my file.
The cat works now since placing the null terminator in the creation of the pzSQLCommand, but only cats the first character "y", for "p" must be a special character that halts the copy. I need to walk through it and see.
The getline command returns this. LC 0 LR 0 LE 0 LA 0 LT 0 LE 0 and so on
+ szCommandLine 0x0012f0e0 "ÿþC" wchar_t [1024]
The first file line, plus rest of command for reference
CREATE TABLE [dbo].[BatchSettlementIndex] (
[BatchID] int IDENTITY(1, 1) NOT NULL,
[BatchName] varchar(80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[BatchDate] datetime NULL,
[BatchAmount] decimal(10, 2) NULL
)
ON [PRIMARY]
GO
I guess I should move forward 1 move and get the next line working first, since the mechanics are better now. Your wisdom has solidified the design, in which I thank you for. If you think of something let me know.
FYI:
I'm almost done with all the little programs I need for my wizard. This is the next to last piece I need, then I can take all the parts, and compile them into some dll's within the project, and make a new gui to support them.
It's to the point where I have gone far beyond the need of InstallShield 2012, and will try the stock deployment to deploy this program, and let it download the asp.net stuff I wrote.
|
|
|
|
|
Well that was fast. The nextline works now. One more to go here, I'll work on the first 2 characters when I get back in 3 hours.
std::wifstream *sqlDBFile = new std::wifstream;
sqlDBFile->open(szFilePath, std::wifstream::in);
if (sqlDBFile->is_open() ) {
while (sqlDBFile->good() ) {
WCHAR *pzSQLCommand = new WCHAR[1024];
*pzSQLCommand = L'\0';
while ( sqlDBFile->get() ) {
WCHAR szCommandLine[1024];
sqlDBFile->getline(szCommandLine, 1024, L'\n');
if (szCommandLine != L"GO") {
wcsncat_s(pzSQLCommand, 1024, szCommandLine, wcslen(szCommandLine) );
break;
}
else {
hr = pICommandText->SetCommandText( DBGUID_DBSQL, pzSQLCommand );
hr = pICommandText->QueryInterface( IID_ICommandProperties, ( void ** ) &pICommandProperties );
hr = pICommandText->Execute( NULL, IID_IRowset, NULL, &cRowsAffected, ( IUnknown ** ) &pIRowset );
}
}
}
sqlDBFile->close();
sqlDBFile = NULL;
}
|
|
|
|
|
You got it. Remember WCHAR is a 16 bit character set, many of which map 1:1 with the ASCII set padded with a zero byte, which is why it looks like an ASCII character followed by a zero.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
i've some code written as a dll in C++ in Visual Studio 2008. I've to be able to debug it. But i can't load dll in test exe. There isn't any problem on my test exe because when i try to load another dll there isn't any problem. Dll that given to me builded in debug unicode. Is it may be the cause of the problem? And how can i convert it to just debug mode? i really need your help., Thanks in advance.
|
|
|
|
|
The debug and debug unicode project settings load different versions of the Microsoft MFC libraries and DLLs.
All of your MFC based projects, need to be compiled and built with the same project settings.
|
|
|
|
|
So, as the other poster said, rebuld your test exe with unicode debug set. (Hope you used the _T before all strings to enable the project to be built both ways.)
==============================
Nothing to say.
|
|
|
|
|