473,401 Members | 2,127 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,401 software developers and data experts.

NativeOverlapped, does it work??

Hi,

I'm trying to read some messages (native structs) from a kernel mode
mini-filter driver. I'm using my own implementation of IAsyncResult to
pack/unpack the NativeOverlapped structure, and waiting for the result to
arrive.

To read the messages frm the kernek driver i'm using native function:
HRESULT WINAPI FilterGetMessage(
IN HANDLE hPort,
IN OUT PFILTER_MESSAGE_HEADER lpMessageBuffer,
IN DWORD dwMessageBufferSize,
IN LPOVERLAPPED lpOverlapped OPTIONAL);

- in C# it looks like:
[DllImport("FltLib", CallingConvention = CallingConvention.Winapi, CharSet =
CharSet.Auto)]
unsafe private static extern int FilterGetMessage(
SafeFileHandle hPort,
IntPtr lpMessageBuffer,
int dwMessageBufferSize,
NativeOverlapped* lpOverlapped);

The code at first glance seems to be working - no errors on either side (not
in the driver and not in the user mode app) - but the data that's being
transferred are invalid. The data is a simple structure of ULONG's with a
total size of 24 bytes.

I know what is written from kernel mode (i wrote the driver myself), but
when the data is received in user mode it's changed!!

One the that puzzles me is that the C# counter part of the data structure
has to be 16 bytes longer than the C++ structure, which perhaps can be
explained by the four int's reserved at the end of the NativeOverlapped??

I'm able to send data to the driver (synchronously, not using overlapped)
with no problems.

Has anyone gotten NativeOverlapped to work, and if so, please point me to
examples.
I build my code greatly inspired from the "Concurrent Affairs" article in
MSDN magazine june 2007 by Jeffrey Richter

Thanks SSJ

Dec 15 '07 #1
5 5880
Soren,

How are you passing the pointer to the NativeOverlapped structure? You
need to keep that fixed in memory, and if you are using a fixed statement
(you might have it on the stack, in which case, you have to store the
structure somewhere) the memory location of the structure is subject to
change.

My guess is that you aren't passing the structure correctly.

Instead, I would pin the structure (and then get the unsafe pointer to
the structure), or marshal it to unmanaged memory, where you can hold onto
the pointer for the life of the call (and dispose of it appropriately when
done).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Soren S. Jorgensen" <no@spammail.comwrote in message
news:Oy**************@TK2MSFTNGP05.phx.gbl...
Hi,

I'm trying to read some messages (native structs) from a kernel mode
mini-filter driver. I'm using my own implementation of IAsyncResult to
pack/unpack the NativeOverlapped structure, and waiting for the result to
arrive.

To read the messages frm the kernek driver i'm using native function:
HRESULT WINAPI FilterGetMessage(
IN HANDLE hPort,
IN OUT PFILTER_MESSAGE_HEADER lpMessageBuffer,
IN DWORD dwMessageBufferSize,
IN LPOVERLAPPED lpOverlapped OPTIONAL);

- in C# it looks like:
[DllImport("FltLib", CallingConvention = CallingConvention.Winapi, CharSet
= CharSet.Auto)]
unsafe private static extern int FilterGetMessage(
SafeFileHandle hPort,
IntPtr lpMessageBuffer,
int dwMessageBufferSize,
NativeOverlapped* lpOverlapped);

The code at first glance seems to be working - no errors on either side
(not in the driver and not in the user mode app) - but the data that's
being transferred are invalid. The data is a simple structure of ULONG's
with a total size of 24 bytes.

I know what is written from kernel mode (i wrote the driver myself), but
when the data is received in user mode it's changed!!

One the that puzzles me is that the C# counter part of the data structure
has to be 16 bytes longer than the C++ structure, which perhaps can be
explained by the four int's reserved at the end of the NativeOverlapped??

I'm able to send data to the driver (synchronously, not using overlapped)
with no problems.

Has anyone gotten NativeOverlapped to work, and if so, please point me to
examples.
I build my code greatly inspired from the "Concurrent Affairs" article in
MSDN magazine june 2007 by Jeffrey Richter

Thanks SSJ
Dec 15 '07 #2

Hi Nicholas,

Well, I create the buffer object (struct) and (in my AsyncResult
implementation) binds it from being collected by GC using a GCHandle
(pinned) and keeps the handle stored there. Then my AsyncResult is passed
into a Overlapped object and the Overlapped is packed into a
NativeOverlapped pointer and passed to the native function, together with
the address of the pinned object (gotten from the GCHandle). When the
IOCompletionCallback (created when unpacking Overlapped) is called, I unpack
the NativeOverlapped into a Overlapped struct a gets my AsyncResult from it
(expecting GCHandle.Target inside it to hold the result of the operation)

The main parts of the code (simplified) is here:

public class FilterPort : Object, IDisposable
{
private void ProbeForMessage()
{
if(_messageEvent.WaitOne(10, false))
{
_messageEvent.Reset();

FILTER_MESSAGE message = new FILTER_MESSAGE();

FilterPortAsyncResult asyncResult = new
FilterPortAsyncResult(message,null,null);

Overlapped ol = new Overlapped(0,
0,_messageEvent.SafeWaitHandle.DangerousGetHandle( ),asyncResult);

NativeOverlapped* nol = ol.Pack(new
IOCompletionCallback(this.OnProbeForMessageComplet ed), message);

int res = FilterGetMessage(_hPort, // Bound to ThreadPool
asyncResult.BufferAddress, asyncResult.BufferSize,nol);

switch(res)
{
case STATUS_SUCCESS: // Message received instantly, never
happens
Overlapped.Free(nol);
asyncResult.Dispose();
break;
case STATUS_ERROR_IO_PENDING: // As it should be
break;
default:
throw new Win32Exception(res); // Need to do something
here
}
}
}

private unsafe void OnProbeForMessageCompleted(uint errorCode, uint
numBytes, NativeOverlapped* nol)
{
try
{
if(errorCode != 0)
{
throw new Win32Exception((int)errorCode);
}
else
{
Overlapped ol = Overlapped.Unpack(nol);

using(FilterPortAsyncResult asyncResult = ol.AsyncResult as
FilterPortAsyncResult)
{
if(asyncResult != null)
{
_messageResult = asyncResult.BufferObject; // This
should be outcome of operation
}
}
}
}
catch(Exception ex)
{
// Do some error handling here
}
finally
{
Overlapped.Free(nol);
}
}
}

public class FilterPortAsyncResult : Object, IAsyncResult, IDisposable
{
public FilterPortAsyncResult(object buffer, AsyncCallback callback,
object userState)
{
if(buffer == null)
{
throw new ArgumentNullException("buffer");
}

_gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
_callback = callback;
_userState = userState;
}

public object BufferObject
{
get { return _gchBuffer.Target; }
}

public IntPtr BufferAddress
{
get { return _gchBuffer.AddrOfPinnedObject(); }
}

public int BufferSize
{
get { return Marshal.SizeOf(_gchBuffer.Target); }
}

// IAsyncResult / IDisposable interface members here
}

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.comskrev i
en meddelelse news:FA**********************************@microsof t.com...
Soren,

How are you passing the pointer to the NativeOverlapped structure? You
need to keep that fixed in memory, and if you are using a fixed statement
(you might have it on the stack, in which case, you have to store the
structure somewhere) the memory location of the structure is subject to
change.

My guess is that you aren't passing the structure correctly.

Instead, I would pin the structure (and then get the unsafe pointer to
the structure), or marshal it to unmanaged memory, where you can hold onto
the pointer for the life of the call (and dispose of it appropriately when
done).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Soren S. Jorgensen" <no@spammail.comwrote in message
news:Oy**************@TK2MSFTNGP05.phx.gbl...
>Hi,

I'm trying to read some messages (native structs) from a kernel mode
mini-filter driver. I'm using my own implementation of IAsyncResult to
pack/unpack the NativeOverlapped structure, and waiting for the result to
arrive.

To read the messages frm the kernek driver i'm using native function:
HRESULT WINAPI FilterGetMessage(
IN HANDLE hPort,
IN OUT PFILTER_MESSAGE_HEADER lpMessageBuffer,
IN DWORD dwMessageBufferSize,
IN LPOVERLAPPED lpOverlapped OPTIONAL);

- in C# it looks like:
[DllImport("FltLib", CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Auto)]
unsafe private static extern int FilterGetMessage(
SafeFileHandle hPort,
IntPtr lpMessageBuffer,
int dwMessageBufferSize,
NativeOverlapped* lpOverlapped);

The code at first glance seems to be working - no errors on either side
(not in the driver and not in the user mode app) - but the data that's
being transferred are invalid. The data is a simple structure of ULONG's
with a total size of 24 bytes.

I know what is written from kernel mode (i wrote the driver myself), but
when the data is received in user mode it's changed!!

One the that puzzles me is that the C# counter part of the data structure
has to be 16 bytes longer than the C++ structure, which perhaps can be
explained by the four int's reserved at the end of the NativeOverlapped??

I'm able to send data to the driver (synchronously, not using overlapped)
with no problems.

Has anyone gotten NativeOverlapped to work, and if so, please point me to
examples.
I build my code greatly inspired from the "Concurrent Affairs" article in
MSDN magazine june 2007 by Jeffrey Richter

Thanks SSJ

Dec 16 '07 #3
Soren,

Looking at your code, it seems like you are doing everything correctly.
The only thing that I am unsure about is why you are pinning the piece of
data in your IAsyncResult implementation. It could very well be because of
my advice before, which was targeted at the NativeOverlapped structure.

Can you boil this down to a complete example (perhaps on another IO
routine which uses the overlapped structure)? I ask, because if it is a
problem with the overlapped structure (or the way it is being called) it
should manifest itself on anyone's machine.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Soren S. Jorgensen" <no@spammail.comwrote in message
news:OH**************@TK2MSFTNGP05.phx.gbl...
>
Hi Nicholas,

Well, I create the buffer object (struct) and (in my AsyncResult
implementation) binds it from being collected by GC using a GCHandle
(pinned) and keeps the handle stored there. Then my AsyncResult is passed
into a Overlapped object and the Overlapped is packed into a
NativeOverlapped pointer and passed to the native function, together with
the address of the pinned object (gotten from the GCHandle). When the
IOCompletionCallback (created when unpacking Overlapped) is called, I
unpack the NativeOverlapped into a Overlapped struct a gets my AsyncResult
from it (expecting GCHandle.Target inside it to hold the result of the
operation)

The main parts of the code (simplified) is here:

public class FilterPort : Object, IDisposable
{
private void ProbeForMessage()
{
if(_messageEvent.WaitOne(10, false))
{
_messageEvent.Reset();

FILTER_MESSAGE message = new FILTER_MESSAGE();

FilterPortAsyncResult asyncResult = new
FilterPortAsyncResult(message,null,null);

Overlapped ol = new Overlapped(0,
0,_messageEvent.SafeWaitHandle.DangerousGetHandle( ),asyncResult);

NativeOverlapped* nol = ol.Pack(new
IOCompletionCallback(this.OnProbeForMessageComplet ed), message);

int res = FilterGetMessage(_hPort, // Bound to ThreadPool
asyncResult.BufferAddress, asyncResult.BufferSize,nol);

switch(res)
{
case STATUS_SUCCESS: // Message received instantly, never
happens
Overlapped.Free(nol);
asyncResult.Dispose();
break;
case STATUS_ERROR_IO_PENDING: // As it should be
break;
default:
throw new Win32Exception(res); // Need to do something
here
}
}
}

private unsafe void OnProbeForMessageCompleted(uint errorCode, uint
numBytes, NativeOverlapped* nol)
{
try
{
if(errorCode != 0)
{
throw new Win32Exception((int)errorCode);
}
else
{
Overlapped ol = Overlapped.Unpack(nol);

using(FilterPortAsyncResult asyncResult = ol.AsyncResult as
FilterPortAsyncResult)
{
if(asyncResult != null)
{
_messageResult = asyncResult.BufferObject; // This
should be outcome of operation
}
}
}
}
catch(Exception ex)
{
// Do some error handling here
}
finally
{
Overlapped.Free(nol);
}
}
}

public class FilterPortAsyncResult : Object, IAsyncResult, IDisposable
{
public FilterPortAsyncResult(object buffer, AsyncCallback callback,
object userState)
{
if(buffer == null)
{
throw new ArgumentNullException("buffer");
}

_gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
_callback = callback;
_userState = userState;
}

public object BufferObject
{
get { return _gchBuffer.Target; }
}

public IntPtr BufferAddress
{
get { return _gchBuffer.AddrOfPinnedObject(); }
}

public int BufferSize
{
get { return Marshal.SizeOf(_gchBuffer.Target); }
}

// IAsyncResult / IDisposable interface members here
}

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.comskrev i
en meddelelse news:FA**********************************@microsof t.com...
>Soren,

How are you passing the pointer to the NativeOverlapped structure?
You need to keep that fixed in memory, and if you are using a fixed
statement (you might have it on the stack, in which case, you have to
store the structure somewhere) the memory location of the structure is
subject to change.

My guess is that you aren't passing the structure correctly.

Instead, I would pin the structure (and then get the unsafe pointer to
the structure), or marshal it to unmanaged memory, where you can hold
onto the pointer for the life of the call (and dispose of it
appropriately when done).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Soren S. Jorgensen" <no@spammail.comwrote in message
news:Oy**************@TK2MSFTNGP05.phx.gbl...
>>Hi,

I'm trying to read some messages (native structs) from a kernel mode
mini-filter driver. I'm using my own implementation of IAsyncResult to
pack/unpack the NativeOverlapped structure, and waiting for the result
to arrive.

To read the messages frm the kernek driver i'm using native function:
HRESULT WINAPI FilterGetMessage(
IN HANDLE hPort,
IN OUT PFILTER_MESSAGE_HEADER lpMessageBuffer,
IN DWORD dwMessageBufferSize,
IN LPOVERLAPPED lpOverlapped OPTIONAL);

- in C# it looks like:
[DllImport("FltLib", CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Auto)]
unsafe private static extern int FilterGetMessage(
SafeFileHandle hPort,
IntPtr lpMessageBuffer,
int dwMessageBufferSize,
NativeOverlapped* lpOverlapped);

The code at first glance seems to be working - no errors on either side
(not in the driver and not in the user mode app) - but the data that's
being transferred are invalid. The data is a simple structure of ULONG's
with a total size of 24 bytes.

I know what is written from kernel mode (i wrote the driver myself), but
when the data is received in user mode it's changed!!

One the that puzzles me is that the C# counter part of the data
structure has to be 16 bytes longer than the C++ structure, which
perhaps can be explained by the four int's reserved at the end of the
NativeOverlapped??

I'm able to send data to the driver (synchronously, not using
overlapped) with no problems.

Has anyone gotten NativeOverlapped to work, and if so, please point me
to examples.
I build my code greatly inspired from the "Concurrent Affairs" article
in MSDN magazine june 2007 by Jeffrey Richter

Thanks SSJ

Dec 16 '07 #4
Nicholas,

I thought the most natural place to put the handle of the data object was in
the IAsyncResult as this is the only "link" between the method actually
calling the native function and the method receiving the outcome. I really
havn't changed much since my first post.

The handle is pinned as you otherwise (with normal alloc) wont be able to
use the pointer to the data after completion (I needed this to marshal out
the actual bytes in the data object, debug debug...) - but really isn't
nessecary.

My true concern is that some odd thing might happen under the hood, as:
1. the memory is moved from kernel to user mode

2. the kernel function that sends the data has two void pointers, one for
the data being send and one for a possible reply - inside the data an
identifier will make it possible to reply to the message (using
FilterReplyMessage) instantly before the kernel call returns. This is not
used in my case, but perhaps something goes wrong here.

3. an additional 16 bytes is needed in the data buffer to be large enough
for data to be marshalled in user mode. 24 bytes is sent from kernel mode
and 40 bytes are received in the completion callback. This is a real
puzzle!!

I'll try to make a working sample with some OS distributed driver (perhaps
an IoControl call or something) and post it somewhere. This might even turn
out working :-)

Thanks again, SSJ

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.comskrev i
en meddelelse news:0E**********************************@microsof t.com...
Soren,

Looking at your code, it seems like you are doing everything correctly.
The only thing that I am unsure about is why you are pinning the piece of
data in your IAsyncResult implementation. It could very well be because
of my advice before, which was targeted at the NativeOverlapped structure.

Can you boil this down to a complete example (perhaps on another IO
routine which uses the overlapped structure)? I ask, because if it is a
problem with the overlapped structure (or the way it is being called) it
should manifest itself on anyone's machine.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Soren S. Jorgensen" <no@spammail.comwrote in message
news:OH**************@TK2MSFTNGP05.phx.gbl...
>>
Hi Nicholas,

Well, I create the buffer object (struct) and (in my AsyncResult
implementation) binds it from being collected by GC using a GCHandle
(pinned) and keeps the handle stored there. Then my AsyncResult is passed
into a Overlapped object and the Overlapped is packed into a
NativeOverlapped pointer and passed to the native function, together with
the address of the pinned object (gotten from the GCHandle). When the
IOCompletionCallback (created when unpacking Overlapped) is called, I
unpack the NativeOverlapped into a Overlapped struct a gets my
AsyncResult from it (expecting GCHandle.Target inside it to hold the
result of the operation)

The main parts of the code (simplified) is here:

public class FilterPort : Object, IDisposable
{
private void ProbeForMessage()
{
if(_messageEvent.WaitOne(10, false))
{
_messageEvent.Reset();

FILTER_MESSAGE message = new FILTER_MESSAGE();

FilterPortAsyncResult asyncResult = new
FilterPortAsyncResult(message,null,null);

Overlapped ol = new Overlapped(0,
0,_messageEvent.SafeWaitHandle.DangerousGetHandle (),asyncResult);

NativeOverlapped* nol = ol.Pack(new
IOCompletionCallback(this.OnProbeForMessageComple ted), message);

int res = FilterGetMessage(_hPort, // Bound to ThreadPool
asyncResult.BufferAddress, asyncResult.BufferSize,nol);

switch(res)
{
case STATUS_SUCCESS: // Message received instantly, never
happens
Overlapped.Free(nol);
asyncResult.Dispose();
break;
case STATUS_ERROR_IO_PENDING: // As it should be
break;
default:
throw new Win32Exception(res); // Need to do something
here
}
}
}

private unsafe void OnProbeForMessageCompleted(uint errorCode, uint
numBytes, NativeOverlapped* nol)
{
try
{
if(errorCode != 0)
{
throw new Win32Exception((int)errorCode);
}
else
{
Overlapped ol = Overlapped.Unpack(nol);

using(FilterPortAsyncResult asyncResult = ol.AsyncResult
as FilterPortAsyncResult)
{
if(asyncResult != null)
{
_messageResult = asyncResult.BufferObject; // This
should be outcome of operation
}
}
}
}
catch(Exception ex)
{
// Do some error handling here
}
finally
{
Overlapped.Free(nol);
}
}
}

public class FilterPortAsyncResult : Object, IAsyncResult, IDisposable
{
public FilterPortAsyncResult(object buffer, AsyncCallback callback,
object userState)
{
if(buffer == null)
{
throw new ArgumentNullException("buffer");
}

_gchBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
_callback = callback;
_userState = userState;
}

public object BufferObject
{
get { return _gchBuffer.Target; }
}

public IntPtr BufferAddress
{
get { return _gchBuffer.AddrOfPinnedObject(); }
}

public int BufferSize
{
get { return Marshal.SizeOf(_gchBuffer.Target); }
}

// IAsyncResult / IDisposable interface members here
}

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.comskrev
i en meddelelse
news:FA**********************************@microso ft.com...
>>Soren,

How are you passing the pointer to the NativeOverlapped structure?
You need to keep that fixed in memory, and if you are using a fixed
statement (you might have it on the stack, in which case, you have to
store the structure somewhere) the memory location of the structure is
subject to change.

My guess is that you aren't passing the structure correctly.

Instead, I would pin the structure (and then get the unsafe pointer
to the structure), or marshal it to unmanaged memory, where you can hold
onto the pointer for the life of the call (and dispose of it
appropriately when done).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Soren S. Jorgensen" <no@spammail.comwrote in message
news:Oy**************@TK2MSFTNGP05.phx.gbl...
Hi,

I'm trying to read some messages (native structs) from a kernel mode
mini-filter driver. I'm using my own implementation of IAsyncResult to
pack/unpack the NativeOverlapped structure, and waiting for the result
to arrive.

To read the messages frm the kernek driver i'm using native function:
HRESULT WINAPI FilterGetMessage(
IN HANDLE hPort,
IN OUT PFILTER_MESSAGE_HEADER lpMessageBuffer,
IN DWORD dwMessageBufferSize,
IN LPOVERLAPPED lpOverlapped OPTIONAL);

- in C# it looks like:
[DllImport("FltLib", CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Auto)]
unsafe private static extern int FilterGetMessage(
SafeFileHandle hPort,
IntPtr lpMessageBuffer,
int dwMessageBufferSize,
NativeOverlapped* lpOverlapped);

The code at first glance seems to be working - no errors on either side
(not in the driver and not in the user mode app) - but the data that's
being transferred are invalid. The data is a simple structure of
ULONG's with a total size of 24 bytes.

I know what is written from kernel mode (i wrote the driver myself),
but when the data is received in user mode it's changed!!

One the that puzzles me is that the C# counter part of the data
structure has to be 16 bytes longer than the C++ structure, which
perhaps can be explained by the four int's reserved at the end of the
NativeOverlapped??

I'm able to send data to the driver (synchronously, not using
overlapped) with no problems.

Has anyone gotten NativeOverlapped to work, and if so, please point me
to examples.
I build my code greatly inspired from the "Concurrent Affairs" article
in MSDN magazine june 2007 by Jeffrey Richter

Thanks SSJ



Dec 16 '07 #5

"Soren S. Jorgensen" <no@spammail.comwrote in message
news:Oy**************@TK2MSFTNGP05.phx.gbl...
Hi,

I'm trying to read some messages (native structs) from a kernel mode
mini-filter driver. I'm using my own implementation of IAsyncResult to
pack/unpack the NativeOverlapped structure, and waiting for the result to
arrive.

To read the messages frm the kernek driver i'm using native function:
HRESULT WINAPI FilterGetMessage(
IN HANDLE hPort,
IN OUT PFILTER_MESSAGE_HEADER lpMessageBuffer,
IN DWORD dwMessageBufferSize,
IN LPOVERLAPPED lpOverlapped OPTIONAL);

- in C# it looks like:
[DllImport("FltLib", CallingConvention = CallingConvention.Winapi, CharSet
= CharSet.Auto)]
unsafe private static extern int FilterGetMessage(
SafeFileHandle hPort,
IntPtr lpMessageBuffer,
int dwMessageBufferSize,
NativeOverlapped* lpOverlapped);

The code at first glance seems to be working - no errors on either side
(not in the driver and not in the user mode app) - but the data that's
being transferred are invalid. The data is a simple structure of ULONG's
with a total size of 24 bytes.

I know what is written from kernel mode (i wrote the driver myself), but
when the data is received in user mode it's changed!!
If you are programming drivers, you will be a lot happier doing this in C++.
Use the C++/CLI compiler to make .NET classes in C++, then you can call them
from your main app in C#.
Dec 17 '07 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

7
by: Jonas | last post by:
This works fine in Win XP but does not work at all in Win 98. Private WithEvents objIExplorer As InternetExplorer I have to do it like this to get it to work in Win 98 Dim objIExplorer As...
5
by: me | last post by:
I have a Class Library that contains a Form and several helper classes. A thread gets created that performs processing of data behind the scenes and the Form never gets displayed (it is for debug...
22
by: Robert Bralic | last post by:
CAN anybody tell me any address where I can download some small(1000-2000) lines C++ proghram source. Or send me ,a small(1000-2000) lines C++ program source that I can compille with gpp under...
12
by: Frank Hauptlorenz | last post by:
Hello Out there! I have a DB2 V7.2 Database (Fix11) on Win 2000 Professional. It was before a NT 4 based Domain - now it is a Win 2000 Domain. The database server is a domain member. Now...
0
by: Jarod_24 | last post by:
How does tabindex work in ASP .net pages I dosen't seem to work quite like in regular forms. and there isn't any TabStop property either. 1 .How do you prevent a control form beign "tabbed"....
14
by: Anoop | last post by:
Hi, I am new to this newsgroup and need help in the following questions. 1. I am workin' on a GUI application. Does C# provides Layout Managers the way Java does to design GUI? I know that it...
89
by: Cuthbert | last post by:
After compiling the source code with gcc v.4.1.1, I got a warning message: "/tmp/ccixzSIL.o: In function 'main';ex.c: (.text+0x9a): warning: the 'gets' function is dangerous and should not be...
14
by: webEater | last post by:
I have a problem, it's not browser specific, and I don't get a solution. I have an (X)HTML document, I show you a part of it: .... <!--<div class="pad">--> <div id="eventImages"><img src=""...
1
by: =?ISO-8859-1?Q?Lasse_V=E5gs=E6ther_Karlsen?= | last post by:
I get the above error in some of the ASP.NET web applications on a server, and I need some help figuring out how to deal with it. This is a rather long post, and I hope I have enough details that...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.